#include <iostream>
using std::cout;
using std::endl;
class Test {
public:
Test() { cout << "Default ctor" << endl; }
Test(const Test&) { cout << "Copy ctor" << endl; }
Test(Test&&) { cout << "Move ctor" << endl; }
Test& operator=(const Test&) { cout << "Copy assign" << endl; }
Test& operator=(Test&&) { cout << "Move assign" << endl; }
~Test() { cout << "Destructor" << endl; }
};
Test test_lvalue;
void func(bool condition) {
Test test = condition ? test_lvalue : Test();
}
int main() {
cout << "Begin main()" << endl;
func(true);
cout << "End main()" << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBzdGQ6OmNvdXQ7CnVzaW5nIHN0ZDo6ZW5kbDsKCmNsYXNzIFRlc3QgewpwdWJsaWM6CiAgICBUZXN0KCkgICAgICAgICAgICAgICAgICAgICAgICB7IGNvdXQgPDwgIkRlZmF1bHQgY3RvciIgPDwgZW5kbDsgfQogICAgVGVzdChjb25zdCBUZXN0JikgICAgICAgICAgICAgeyBjb3V0IDw8ICJDb3B5IGN0b3IiIDw8IGVuZGw7IH0KICAgIFRlc3QoVGVzdCYmKSAgICAgICAgICAgICAgICAgIHsgY291dCA8PCAiTW92ZSBjdG9yIiA8PCBlbmRsOyB9CiAgICBUZXN0JiBvcGVyYXRvcj0oY29uc3QgVGVzdCYpICB7IGNvdXQgPDwgIkNvcHkgYXNzaWduIiA8PCBlbmRsOyB9CiAgICBUZXN0JiBvcGVyYXRvcj0oVGVzdCYmKSAgICAgICB7IGNvdXQgPDwgIk1vdmUgYXNzaWduIiA8PCBlbmRsOyB9CiAgICB+VGVzdCgpICAgICAgICAgICAgICAgICAgICAgICB7IGNvdXQgPDwgIkRlc3RydWN0b3IiIDw8IGVuZGw7IH0KfTsKClRlc3QgdGVzdF9sdmFsdWU7Cgp2b2lkIGZ1bmMoYm9vbCBjb25kaXRpb24pIHsKICAgIFRlc3QgdGVzdCA9IGNvbmRpdGlvbiA/IHRlc3RfbHZhbHVlIDogVGVzdCgpOwp9CgppbnQgbWFpbigpIHsKICAgIGNvdXQgPDwgIkJlZ2luIG1haW4oKSIgPDwgZW5kbDsKICAgIGZ1bmModHJ1ZSk7CiAgICBjb3V0IDw8ICJFbmQgbWFpbigpIiA8PCBlbmRsOwp9Cg==