#include <iostream>
struct T {
int n;
T(int n) : n(n) { std::cout << "create " << n << "\n"; }
T(T const &x) : n(x.n) { std::cout << "copy " << n << "\n"; }
T(T &&x) : n() { std::swap(n, x.n); std::cout << "move " << n << "\n"; }
~T() { std::cout << "destroy " << n << "\n"; }
void operator+=(T const &x) { n += x.n; }
};
T operator+(T a, T const &b) { a += b; return a; }
T f() { return T(18); }
int main() {
T obj {f() + T(24)};
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IFQgewoJaW50IG47CglUKGludCBuKSA6IG4obikgeyBzdGQ6OmNvdXQgPDwgImNyZWF0ZSAiIDw8IG4gPDwgIlxuIjsgfQoJVChUIGNvbnN0ICZ4KSA6IG4oeC5uKSB7IHN0ZDo6Y291dCA8PCAiY29weSAiIDw8IG4gPDwgIlxuIjsgfQoJVChUICYmeCkgOiBuKCkgeyBzdGQ6OnN3YXAobiwgeC5uKTsgc3RkOjpjb3V0IDw8ICJtb3ZlICIgPDwgbiA8PCAiXG4iOyB9Cgl+VCgpIHsgc3RkOjpjb3V0IDw8ICJkZXN0cm95ICIgPDwgbiA8PCAiXG4iOyB9CgoJdm9pZCBvcGVyYXRvcis9KFQgY29uc3QgJngpIHsgbiArPSB4Lm47IH0KfTsKVCBvcGVyYXRvcisoVCBhLCBUIGNvbnN0ICZiKSB7IGEgKz0gYjsgcmV0dXJuIGE7IH0KClQgZigpIHsgcmV0dXJuIFQoMTgpOyB9CmludCBtYWluKCkgewoJVCBvYmoge2YoKSArIFQoMjQpfTsKCXJldHVybiAwOwp9