#include <iostream>
using namespace std;
template <class T> //для lvalue
T&& go(T& x )
{
return static_cast<T&&>(x);
}
template <class T >
T&& go(T&& x) //rvalue
{
return static_cast<T&&>(x);
}
class Huston
{
int a;
public:
Huston(int& f) :a(f)
{
}
Huston(int&& b) :a(move(b))
{
}
};
int func(int b ){ return b; }
int main()
{
int b = 3;
Huston a(go(b));//move constructor is called
Huston c(go(2));//move constructor is called
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgVD4gIC8v0LTQu9GPIGx2YWx1ZQpUJiYgZ28oVCYgeCApCnsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxUJiY+KHgpOwp9CiAKdGVtcGxhdGUgPGNsYXNzIFQgPgpUJiYgZ28oVCYmIHgpICAgICAgICAgICAgICAgICAgLy9ydmFsdWUKewogICAgcmV0dXJuIHN0YXRpY19jYXN0PFQmJj4oeCk7Cn0KIApjbGFzcyBIdXN0b24KewogICAgaW50IGE7CnB1YmxpYzoKICAgIEh1c3RvbihpbnQmIGYpIDphKGYpCiAgICB7CiAKICAgIH0KICAgIEh1c3RvbihpbnQmJiBiKSA6YShtb3ZlKGIpKQogICAgewogCiAgICB9Cn07CmludCBmdW5jKGludCBiICl7IHJldHVybiBiOyB9CmludCBtYWluKCkKewogICAgCiAgICBpbnQgYiA9IDM7CiAgICBIdXN0b24gYShnbyhiKSk7Ly9tb3ZlIGNvbnN0cnVjdG9yIGlzIGNhbGxlZAogICAgSHVzdG9uIGMoZ28oMikpOy8vbW92ZSBjb25zdHJ1Y3RvciBpcyBjYWxsZWQKICAgIHJldHVybiAwOwp9