#include <iostream>
#include <utility>
struct X
{
int n_;
explicit X(int n) : n_(n) { std::cout << "Construct: " << n_ << "\n"; }
X(X const & rhs) : n_(rhs.n_) { std::cout << "X copy:" << n_ << "\n"; }
X(X && rhs) : n_(rhs.n_) { rhs.n_ = -1; std::cout << "X move:" << n_ << "\n"; }
~X() { std::cout << "Destroy: " << n_ << "\n"; }
};
struct A
{
explicit A(X x) : x_(std::move(x)) {};
X x_;
};
struct B
{
X x;
};
int main()
{
A a(X(12));
B b { X(24) };
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KCnN0cnVjdCBYCnsKCWludCBuXzsKCQoJZXhwbGljaXQgWChpbnQgbikgOiBuXyhuKSB7IHN0ZDo6Y291dCA8PCAiQ29uc3RydWN0OiAiIDw8IG5fIDw8ICJcbiI7IH0KCVgoWCBjb25zdCAmIHJocykgOiBuXyhyaHMubl8pIHsgc3RkOjpjb3V0IDw8ICJYIGNvcHk6IiA8PCBuXyA8PCAiXG4iOyB9CglYKFggJiYgcmhzKSA6IG5fKHJocy5uXykgeyByaHMubl8gPSAtMTsgc3RkOjpjb3V0IDw8ICJYIG1vdmU6IiA8PCBuXyA8PCAiXG4iOyB9Cgl+WCgpIHsgc3RkOjpjb3V0IDw8ICJEZXN0cm95OiAiIDw8IG5fIDw8ICJcbiI7IH0KfTsKCnN0cnVjdCBBCnsKCWV4cGxpY2l0IEEoWCB4KSA6IHhfKHN0ZDo6bW92ZSh4KSkge307CglYIHhfOwp9OwoKc3RydWN0IEIKewoJWCB4Owp9OwoKaW50IG1haW4oKQp7CglBIGEoWCgxMikpOwoJQiBiIHsgWCgyNCkgfTsKfQ==