#include <iostream>
struct Foo {
Foo() {
std::cout << "constructor" << std::endl;
}
Foo(Foo && x) {
std::cout << "move" << std::endl;
}
Foo(Foo const & x) {
std::cout << "copy" << std::endl;
}
~Foo() {
std::cout << "destructor" << std::endl;
}
};
Foo f(bool b) {
Foo x;
Foo y;
if (b) { return x; }
return y;
}
int main() {
Foo x(f(true));
std::cout << "fin" << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEZvbyB7CiAgICBGb28oKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJjb25zdHJ1Y3RvciIgPDwgc3RkOjplbmRsOwogICAgfQogICAgRm9vKEZvbyAmJiB4KSB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJtb3ZlIiA8PCBzdGQ6OmVuZGw7CiAgICB9CiAgICBGb28oRm9vIGNvbnN0ICYgeCkgewogICAgICAgIHN0ZDo6Y291dCA8PCAiY29weSIgPDwgc3RkOjplbmRsOwogICAgfQogICAgfkZvbygpIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgImRlc3RydWN0b3IiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KfTsKCkZvbyBmKGJvb2wgYikgewogICAgRm9vIHg7CiAgICBGb28geTsKICAgIGlmIChiKSB7IHJldHVybiB4OyB9CiAgICByZXR1cm4geTsKfQoKaW50IG1haW4oKSB7CiAgIEZvbyB4KGYodHJ1ZSkpOwogICBzdGQ6OmNvdXQgPDwgImZpbiIgPDwgc3RkOjplbmRsOwp9