#include <iostream>
struct X {
char const* name;
X(char const* name) : name(name) { std::cout << name << " constructed @" << this << std::endl; }
X(X&& other) {
name = other.name;
other.name = "moved_obj";
std::cout << name << " moved @" << this << " <- @" << &other << std::endl;
}
~X() { std::cout << name << " destroyed @" << this << std::endl; }
};
int main() {
X a("a");
int x;
std::cin >> x;
X&& rv = x == 10 ? std::move(a) : X("b");
std::cout << "Using " << rv.name << "\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IFggewogICAgY2hhciBjb25zdCogbmFtZTsKCiAgICBYKGNoYXIgY29uc3QqIG5hbWUpIDogbmFtZShuYW1lKSB7IHN0ZDo6Y291dCA8PCBuYW1lIDw8ICIgY29uc3RydWN0ZWQgQCIgPDwgdGhpcyA8PCBzdGQ6OmVuZGw7IH0KICAgIFgoWCYmIG90aGVyKSB7CgluYW1lID0gb3RoZXIubmFtZTsKICAgICAgICBvdGhlci5uYW1lID0gIm1vdmVkX29iaiI7CiAgICAgICAgc3RkOjpjb3V0IDw8IG5hbWUgPDwgIiBtb3ZlZCBAIiA8PCB0aGlzIDw8ICIgPC0gQCIgPDwgJm90aGVyIDw8IHN0ZDo6ZW5kbDsKICAgIH0KICAgIH5YKCkgeyBzdGQ6OmNvdXQgPDwgbmFtZSA8PCAiIGRlc3Ryb3llZCBAIiA8PCB0aGlzIDw8IHN0ZDo6ZW5kbDsgfQp9OwoKaW50IG1haW4oKSB7CiAgICBYIGEoImEiKTsKICAgIGludCB4OwogICAgc3RkOjpjaW4gPj4geDsKICAgIFgmJiBydiA9IHggPT0gMTAgPyBzdGQ6Om1vdmUoYSkgOiBYKCJiIik7CiAgICBzdGQ6OmNvdXQgPDwgIlVzaW5nICIgPDwgcnYubmFtZSA8PCAiXG4iOwp9