#include <iostream>
struct X
{
X() : i_(0) { std::cout << "X(" << this << ")\n"; }
X(int i) : i_(i) { std::cout << "X(" << this << ", i " << i << ")\n"; }
X(const X& rhs) : i_(rhs.i_) { std::cout << "X(" << this << ", const X& " << &rhs << ")\n"; }
~X() { std::cout << "~X(" << this << ")\n"; }
X func() { std::cout << "X::func(this " << this << ")\n"; X x(2); return x; }
int i_;
};
int main()
{
X x1;
X x2 = x1.func();
std::cout << "x1 " << &x1 << ", x2 " << &x2 << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPiAKCnN0cnVjdCBYCnsKICAgIFgoKSA6IGlfKDApIHsgc3RkOjpjb3V0IDw8ICJYKCIgPDwgdGhpcyA8PCAiKVxuIjsgfQogICAgWChpbnQgaSkgOiBpXyhpKSB7IHN0ZDo6Y291dCA8PCAiWCgiIDw8IHRoaXMgPDwgIiwgaSAiIDw8IGkgPDwgIilcbiI7IH0KICAgIFgoY29uc3QgWCYgcmhzKSA6IGlfKHJocy5pXykgeyBzdGQ6OmNvdXQgPDwgIlgoIiA8PCB0aGlzIDw8ICIsIGNvbnN0IFgmICIgPDwgJnJocyA8PCAiKVxuIjsgfQogICAgflgoKSB7IHN0ZDo6Y291dCA8PCAiflgoIiA8PCB0aGlzIDw8ICIpXG4iOyB9CiAgICBYIGZ1bmMoKSB7IHN0ZDo6Y291dCA8PCAiWDo6ZnVuYyh0aGlzICIgPDwgdGhpcyA8PCAiKVxuIjsgWCB4KDIpOyByZXR1cm4geDsgfQogICAgaW50IGlfOwp9OwoKaW50IG1haW4oKQp7CiAgICBYIHgxOwogICAgWCB4MiA9IHgxLmZ1bmMoKTsKICAgIHN0ZDo6Y291dCA8PCAieDEgIiA8PCAmeDEgPDwgIiwgeDIgIiA8PCAmeDIgPDwgJ1xuJzsKfQ==