#include <iostream>
#include <cstdlib>
using namespace std;
struct Foo {
Foo() = default;
Foo(const Foo&) {
cout << __PRETTY_FUNCTION__ << endl;
}
Foo(Foo&&) {
cout << __PRETTY_FUNCTION__ << endl;
}
};
struct Bar {
operator Foo() const {
Foo f;
return f;
}
};
Foo getFoo() {
if (rand() % 2 == 0)
throw "something wrong";
Bar b;
return b;
}
int main() {
auto foo = getFoo();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGxpYj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBGb28gewoJRm9vKCkgPSBkZWZhdWx0OwoJRm9vKGNvbnN0IEZvbyYpIHsKCQljb3V0IDw8IF9fUFJFVFRZX0ZVTkNUSU9OX18gPDwgZW5kbDsKCX0KCUZvbyhGb28mJikgewoJCWNvdXQgPDwgX19QUkVUVFlfRlVOQ1RJT05fXyA8PCBlbmRsOwoJfQp9OwoKc3RydWN0IEJhciB7CglvcGVyYXRvciBGb28oKSBjb25zdCB7CgkJRm9vIGY7CgkJcmV0dXJuIGY7Cgl9Cn07CgpGb28gZ2V0Rm9vKCkgewoJaWYgKHJhbmQoKSAlIDIgPT0gMCkKCQl0aHJvdyAic29tZXRoaW5nIHdyb25nIjsKCUJhciBiOwoJcmV0dXJuIGI7Cn0KCmludCBtYWluKCkgewoJYXV0byBmb28gPSBnZXRGb28oKTsKCXJldHVybiAwOwp9