// PHPのlist風なバインドできないか試してみたかった
// author: Leonardone @ NEETSDKASU
#include <iostream>

template<typename T>
class Bind {
    int len; T *xs[4];
public:
    Bind(T &a) : len(1) { xs[0] = &a; }
    Bind(T &a, T &b) : len(2) { xs[0] = &a; xs[1] = &b; }
    Bind(T &a, T &b, T &c) : len(3) { xs[0] = &a; xs[1] = &b; xs[2] = &c; }
    Bind(T &a, T &b, T &c, T &d) : len(4) { xs[0] = &a; xs[1] = &b; xs[2] = &c; xs[3] = &d; }
    Bind* operator= (T ys[]) { for (int i = 0; i < len; i++) *xs[i] = ys[i]; return this; }
};
template<typename X> Bind<X> list(X &a) { return Bind<X>(a); }
template<typename X> Bind<X> list(X &a, X &b) { return Bind<X>(a, b); }
template<typename X> Bind<X> list(X &a, X &b, X &c) { return Bind<X>(a, b, c); }
template<typename X> Bind<X> list(X &a, X &b, X &c, X &d) { return Bind<X>(a, b, c, d); }

int main() {
    int a = 1, b = 2, c = 3;
    int ys[] = {5, 6, 7};
    
    std::cout << a << "," << b << "," << c << std::endl;
    
    list(a, b, c) = ys;
    
    std::cout << a << "," << b << "," << c << std::endl;
    
    return 0;
}