#pragma hdrstop
#pragma argsused
#include <iostream>
#include <string>
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;
std::string dummy("test");
std::string someStringFunc()
{
return "someStringFunc";
}
void func(bool condition) {
Test test = condition ? test_lvalue : Test();
std::string dummy2 = condition ? dummy : someStringFunc();
}
int main() {
cout << "Begin main()" << endl;
func(true);
cout << "End main()" << endl;
}
I3ByYWdtYSBoZHJzdG9wCiNwcmFnbWEgYXJnc3VzZWQKCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KCnVzaW5nIHN0ZDo6Y291dDsKdXNpbmcgc3RkOjplbmRsOwoKY2xhc3MgVGVzdCB7CnB1YmxpYzoKICAgIFRlc3QoKSAgICAgICAgICAgICAgICAgICAgICAgIHsgY291dCA8PCAiRGVmYXVsdCBjdG9yIiA8PCBlbmRsOyB9CglUZXN0KGNvbnN0IFRlc3QmKSAgICAgICAgICAgICB7IGNvdXQgPDwgIkNvcHkgY3RvciIgPDwgZW5kbDsgfQoJVGVzdChUZXN0JiYpICAgICAgICAgICAgICAgICAgeyBjb3V0IDw8ICJNb3ZlIGN0b3IiIDw8IGVuZGw7IH0KCVRlc3QmIG9wZXJhdG9yPShjb25zdCBUZXN0JikgIHsgY291dCA8PCAiQ29weSBhc3NpZ24iIDw8IGVuZGw7IH0KCVRlc3QmIG9wZXJhdG9yPShUZXN0JiYpICAgICAgIHsgY291dCA8PCAiTW92ZSBhc3NpZ24iIDw8IGVuZGw7IH0KCX5UZXN0KCkgICAgICAgICAgICAgICAgICAgICAgIHsgY291dCA8PCAiRGVzdHJ1Y3RvciIgPDwgZW5kbDsgfQp9OwoKVGVzdCB0ZXN0X2x2YWx1ZTsKc3RkOjpzdHJpbmcgZHVtbXkoInRlc3QiKTsKCnN0ZDo6c3RyaW5nIHNvbWVTdHJpbmdGdW5jKCkKewoJcmV0dXJuICJzb21lU3RyaW5nRnVuYyI7Cn0KCnZvaWQgZnVuYyhib29sIGNvbmRpdGlvbikgewoJVGVzdCB0ZXN0ID0gY29uZGl0aW9uID8gdGVzdF9sdmFsdWUgOiBUZXN0KCk7CglzdGQ6OnN0cmluZyBkdW1teTIgPSBjb25kaXRpb24gPyBkdW1teSA6IHNvbWVTdHJpbmdGdW5jKCk7Cn0KCmludCBtYWluKCkgewogICAgY291dCA8PCAiQmVnaW4gbWFpbigpIiA8PCBlbmRsOwoJZnVuYyh0cnVlKTsKCWNvdXQgPDwgIkVuZCBtYWluKCkiIDw8IGVuZGw7Cn0K