#include <iostream>
using namespace std;
class Foo
{
public:
Foo(){ cout<<"cstor"<<endl; }
~Foo(){ cout<<"dstor"<<endl; }
Foo(const Foo&){ cout<<"copy"<<endl; }
Foo(Foo&&){ cout<<"move"<<endl; }
};
Foo Get(Foo&& foo)
{
cout<<"Get"<<endl;
return foo;
}
Foo Get2(Foo&& foo)
{
cout<<"Get"<<endl;
return std::move(foo);
}
int main() {
Foo f;
Foo f2;
Get(std::move(f));
cout<<"After Get"<<endl;
Get2(std::move(f2));
cout<<"After Get2"<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjbGFzcyBGb28KewpwdWJsaWM6CglGb28oKXsgY291dDw8ImNzdG9yIjw8ZW5kbDsgfQoJfkZvbygpeyBjb3V0PDwiZHN0b3IiPDxlbmRsOyB9CglGb28oY29uc3QgRm9vJil7IGNvdXQ8PCJjb3B5Ijw8ZW5kbDsgfQoJRm9vKEZvbyYmKXsgY291dDw8Im1vdmUiPDxlbmRsOyB9Cn07CkZvbyBHZXQoRm9vJiYgZm9vKQp7Cgljb3V0PDwiR2V0Ijw8ZW5kbDsKCXJldHVybiBmb287Cn0KRm9vIEdldDIoRm9vJiYgZm9vKQp7Cgljb3V0PDwiR2V0Ijw8ZW5kbDsKCXJldHVybiBzdGQ6Om1vdmUoZm9vKTsKfQppbnQgbWFpbigpIHsKCUZvbyBmOwoJRm9vIGYyOwoJR2V0KHN0ZDo6bW92ZShmKSk7Cgljb3V0PDwiQWZ0ZXIgR2V0Ijw8ZW5kbDsKCUdldDIoc3RkOjptb3ZlKGYyKSk7Cgljb3V0PDwiQWZ0ZXIgR2V0MiI8PGVuZGw7CglyZXR1cm4gMDsKfQ==