#include <iostream>
#include <memory>
struct A {
const char* name;
A( const char* name_ ):name(name_) { std::cout << "created " << name << "\n"; }
//A(A const&){ std::cout << "copied " << name << "\n"; }
A(const A &&){ std::cout << "moved " << name << "\n"; }
~A() { std::cout << "dtor " << name << "\n"; }
};
A f() {
std::cout << "start of f()\n";
const A r("bob");
std::cout << "body of f()\n";
return r;
}
/*
std::unique_ptr<A> g() {
const auto r = std::make_unique<A>("bill");
return r;
}
*/
int main() {
A x = f();
//std::unique_ptr<A> y = g();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKc3RydWN0IEEgewogIGNvbnN0IGNoYXIqIG5hbWU7CiAgQSggY29uc3QgY2hhciogbmFtZV8gKTpuYW1lKG5hbWVfKSB7IHN0ZDo6Y291dCA8PCAiY3JlYXRlZCAiIDw8IG5hbWUgPDwgIlxuIjsgfQogIC8vQShBIGNvbnN0Jil7IHN0ZDo6Y291dCA8PCAiY29waWVkICIgPDwgbmFtZSA8PCAiXG4iOyB9CiAgQShjb25zdCBBICYmKXsgc3RkOjpjb3V0IDw8ICJtb3ZlZCAiIDw8IG5hbWUgPDwgIlxuIjsgfQogIH5BKCkgeyBzdGQ6OmNvdXQgPDwgImR0b3IgIiA8PCBuYW1lIDw8ICJcbiI7IH0KfTsKCkEgZigpIHsKICBzdGQ6OmNvdXQgPDwgInN0YXJ0IG9mIGYoKVxuIjsKICBjb25zdCBBIHIoImJvYiIpOwogIHN0ZDo6Y291dCA8PCAiYm9keSBvZiBmKClcbiI7CiAgcmV0dXJuIHI7Cn0KCi8qCnN0ZDo6dW5pcXVlX3B0cjxBPiBnKCkgewogIGNvbnN0IGF1dG8gciA9IHN0ZDo6bWFrZV91bmlxdWU8QT4oImJpbGwiKTsKICByZXR1cm4gcjsKfQoqLwoKaW50IG1haW4oKSB7CiAgQSB4ID0gZigpOwogIC8vc3RkOjp1bmlxdWVfcHRyPEE+IHkgPSBnKCk7Cn0=