#include <iostream>
using namespace std;
void foo_no_template(int &&y) {
y = 1500;
cout << "foo_no_template's y :" << y << endl;
}
template<class T>
void foo(T &&y) {
y = 500;
cout << "foo's y :" << y << endl;
}
template<class T>
void bar(T &&y) {
foo(move(y));
cout << "bar's y after foo :" << y << endl; // prints 500
foo_no_template(move(y));
cout << "bar's y after foo no template:" << y << endl; // prints 1500
}
int main()
{
bar(10);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp2b2lkIGZvb19ub190ZW1wbGF0ZShpbnQgJiZ5KSB7Cgl5ID0gMTUwMDsKCWNvdXQgPDwgImZvb19ub190ZW1wbGF0ZSdzIHkgOiIgPDwgeSA8PCBlbmRsOwp9CnRlbXBsYXRlPGNsYXNzIFQ+CnZvaWQgZm9vKFQgJiZ5KSB7Cgl5ID0gNTAwOwoJY291dCA8PCAiZm9vJ3MgeSA6IiA8PCB5IDw8IGVuZGw7Cn0KdGVtcGxhdGU8Y2xhc3MgVD4Kdm9pZCBiYXIoVCAmJnkpIHsKCWZvbyhtb3ZlKHkpKTsKCWNvdXQgPDwgImJhcidzIHkgYWZ0ZXIgZm9vIDoiIDw8IHkgPDwgZW5kbDsgIC8vIHByaW50cyA1MDAKCWZvb19ub190ZW1wbGF0ZShtb3ZlKHkpKTsKCWNvdXQgPDwgImJhcidzIHkgYWZ0ZXIgZm9vIG5vIHRlbXBsYXRlOiIgPDwgeSA8PCBlbmRsOyAgLy8gcHJpbnRzIDE1MDAKfQppbnQgbWFpbigpCnsKCWJhcigxMCk7CglyZXR1cm4gMDsKfQo=