#include <iostream>
#include <utility>
using namespace std;
namespace details {
template <class T1, class T2>
struct tie{
T1& first;
T2& second;
tie(T1& x, T2& y) : first(x), second(y) {}
tie<T1, T2>& operator=(const pair<T1, T2>& rhs){
first = rhs.first;
second = rhs.second;
return *this;
}
};
}
template <class T1, class T2>
details::tie<T1, T2> tie(T1& x, T2& y) {
return details::tie<T1, T2>(x, y);
}
pair<int, int> test() {
return make_pair(13, 42);
}
int main() {
int a = 1, b = 2;
int c = 3, d = 4;
details::tie<int, int>(a, b) = test();
tie(c, d) = test();
cout << a << ' ' << b << endl << c << ' ' << d << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpuYW1lc3BhY2UgZGV0YWlscyB7Cgl0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgoJc3RydWN0IHRpZXsKCQlUMSYgZmlyc3Q7CgkJVDImIHNlY29uZDsKCQkKCQl0aWUoVDEmIHgsIFQyJiB5KSA6IGZpcnN0KHgpLCBzZWNvbmQoeSkge30KCgkJdGllPFQxLCBUMj4mIG9wZXJhdG9yPShjb25zdCBwYWlyPFQxLCBUMj4mIHJocyl7CgkJCWZpcnN0ID0gcmhzLmZpcnN0OwoJCQlzZWNvbmQgPSByaHMuc2Vjb25kOwoKCQkJcmV0dXJuICp0aGlzOwoJCX0KCX07Cn0KCnRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+CmRldGFpbHM6OnRpZTxUMSwgVDI+IHRpZShUMSYgeCwgVDImIHkpIHsgCglyZXR1cm4gZGV0YWlsczo6dGllPFQxLCBUMj4oeCwgeSk7Cn0gCgpwYWlyPGludCwgaW50PiB0ZXN0KCkgewogICAgcmV0dXJuIG1ha2VfcGFpcigxMywgNDIpOwp9CgppbnQgbWFpbigpIHsKCWludCBhID0gMSwgYiA9IDI7CglpbnQgYyA9IDMsIGQgPSA0OwoKCWRldGFpbHM6OnRpZTxpbnQsIGludD4oYSwgYikgPSB0ZXN0KCk7Cgl0aWUoYywgZCkgPSB0ZXN0KCk7CgogCgljb3V0IDw8IGEgPDwgJyAnIDw8IGIgPDwgZW5kbCA8PCBjIDw8ICcgJyA8PCBkIDw8IGVuZGw7Cgp9