#include <iostream>
using namespace std;
struct T03 {
T03() { std::cout << "T03()" << std::endl; }
T03(const T03&) { std::cout << "T03(const T03&)" << std::endl; }
T03 & operator=(const T03&) { std::cout << "T03 & operator=(const T03&) " << std::endl; return *this; }
~T03() { std::cout << "~T03()" << std::endl; }
};
T03 foo1() {
T03 t;
return t;
}
T03 foo2() {
T03 t;
return std::move(t);
}
int main() {
std::cout << "foo1:" << std::endl;
T03 t1 = foo1();
std::cout << "foo2:" << std::endl;
T03 t2 = foo2();
std::cout << "cleanup:" << std::endl;
return 0;
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAgICAgCiAgICBzdHJ1Y3QgVDAzIHsKICAgICAgVDAzKCkgeyBzdGQ6OmNvdXQgPDwgIlQwMygpIiA8PCBzdGQ6OmVuZGw7IH0KICAgICAgVDAzKGNvbnN0IFQwMyYpIHsgc3RkOjpjb3V0IDw8ICJUMDMoY29uc3QgVDAzJikiIDw8IHN0ZDo6ZW5kbDsgfQogICAgICBUMDMgJiBvcGVyYXRvcj0oY29uc3QgVDAzJikgeyBzdGQ6OmNvdXQgPDwgIlQwMyAmIG9wZXJhdG9yPShjb25zdCBUMDMmKSAiIDw8IHN0ZDo6ZW5kbDsgcmV0dXJuICp0aGlzOyAgfQogICAgICB+VDAzKCkgeyBzdGQ6OmNvdXQgPDwgIn5UMDMoKSIgPDwgc3RkOjplbmRsOyB9CiAgICB9OwogICAgIAogICAgVDAzIGZvbzEoKSB7CiAgICAJVDAzIHQ7CiAgICAJcmV0dXJuIHQ7CiAgICB9CiAgICAKICAgICAKICAgIFQwMyBmb28yKCkgewogICAgCVQwMyB0OwogICAgCXJldHVybiBzdGQ6Om1vdmUodCk7CiAgICB9CiAgICAgCiAgICBpbnQgbWFpbigpIHsKICAgIAlzdGQ6OmNvdXQgPDwgImZvbzE6IiA8PCBzdGQ6OmVuZGw7CiAgICAJVDAzIHQxID0gZm9vMSgpOwogICAgCXN0ZDo6Y291dCA8PCAiZm9vMjoiIDw8IHN0ZDo6ZW5kbDsKICAgIAlUMDMgdDIgPSBmb28yKCk7CiAgICAJc3RkOjpjb3V0IDw8ICJjbGVhbnVwOiIgPDwgc3RkOjplbmRsOwogICAgIAogICAgCXJldHVybiAwOwogICAgfQ==