// 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;
}
Ly8gUEhQ44GubGlzdOmiqOOBquODkOOCpOODs+ODieOBp+OBjeOBquOBhOOBi+ippuOBl+OBpuOBv+OBn+OBi+OBo+OBnwovLyBhdXRob3I6IExlb25hcmRvbmUgQCBORUVUU0RLQVNVCiNpbmNsdWRlIDxpb3N0cmVhbT4KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CmNsYXNzIEJpbmQgewogICAgaW50IGxlbjsgVCAqeHNbNF07CnB1YmxpYzoKICAgIEJpbmQoVCAmYSkgOiBsZW4oMSkgeyB4c1swXSA9ICZhOyB9CiAgICBCaW5kKFQgJmEsIFQgJmIpIDogbGVuKDIpIHsgeHNbMF0gPSAmYTsgeHNbMV0gPSAmYjsgfQogICAgQmluZChUICZhLCBUICZiLCBUICZjKSA6IGxlbigzKSB7IHhzWzBdID0gJmE7IHhzWzFdID0gJmI7IHhzWzJdID0gJmM7IH0KICAgIEJpbmQoVCAmYSwgVCAmYiwgVCAmYywgVCAmZCkgOiBsZW4oNCkgeyB4c1swXSA9ICZhOyB4c1sxXSA9ICZiOyB4c1syXSA9ICZjOyB4c1szXSA9ICZkOyB9CiAgICBCaW5kKiBvcGVyYXRvcj0gKFQgeXNbXSkgeyBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSAqeHNbaV0gPSB5c1tpXTsgcmV0dXJuIHRoaXM7IH0KfTsKdGVtcGxhdGU8dHlwZW5hbWUgWD4gQmluZDxYPiBsaXN0KFggJmEpIHsgcmV0dXJuIEJpbmQ8WD4oYSk7IH0KdGVtcGxhdGU8dHlwZW5hbWUgWD4gQmluZDxYPiBsaXN0KFggJmEsIFggJmIpIHsgcmV0dXJuIEJpbmQ8WD4oYSwgYik7IH0KdGVtcGxhdGU8dHlwZW5hbWUgWD4gQmluZDxYPiBsaXN0KFggJmEsIFggJmIsIFggJmMpIHsgcmV0dXJuIEJpbmQ8WD4oYSwgYiwgYyk7IH0KdGVtcGxhdGU8dHlwZW5hbWUgWD4gQmluZDxYPiBsaXN0KFggJmEsIFggJmIsIFggJmMsIFggJmQpIHsgcmV0dXJuIEJpbmQ8WD4oYSwgYiwgYywgZCk7IH0KCmludCBtYWluKCkgewogICAgaW50IGEgPSAxLCBiID0gMiwgYyA9IDM7CiAgICBpbnQgeXNbXSA9IHs1LCA2LCA3fTsKICAgIAogICAgc3RkOjpjb3V0IDw8IGEgPDwgIiwiIDw8IGIgPDwgIiwiIDw8IGMgPDwgc3RkOjplbmRsOwogICAgCiAgICBsaXN0KGEsIGIsIGMpID0geXM7CiAgICAKICAgIHN0ZDo6Y291dCA8PCBhIDw8ICIsIiA8PCBiIDw8ICIsIiA8PCBjIDw8IHN0ZDo6ZW5kbDsKICAgIAogICAgcmV0dXJuIDA7Cn0=