#include <iostream>
using namespace std;
struct Light
{
Light() { cout << "Light()"<<endl; }
Light(const Light&) { cout << "Light(const Light&)"<<endl; }
~Light() { cout << "~Light()"<<endl; }
};
struct Heavy
{
Heavy() { cout << "Heavy()"<<endl; }
Heavy(const Heavy&) { cout << "Heavy(const Heavy&)"<<endl; }
//Heavy(const Light&) { cout << "Heavy(const Light&)"<<endl; }
~Heavy() { cout << "~Heavy()"<<endl; }
operator Light() { cout << "operator Light()"<<endl; Light l; return l; }
};
Light ternary(Heavy* h)
{
cout << "ternary"<<endl;
return h ? *h : Light();
}
int main()
{
Heavy h;
Light l = ternary(&h);
cout << "return"<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IExpZ2h0CnsKICBMaWdodCgpIHsgY291dCA8PCAiTGlnaHQoKSI8PGVuZGw7IH0KICBMaWdodChjb25zdCBMaWdodCYpIHsgY291dCA8PCAiTGlnaHQoY29uc3QgTGlnaHQmKSI8PGVuZGw7IH0KICB+TGlnaHQoKSB7IGNvdXQgPDwgIn5MaWdodCgpIjw8ZW5kbDsgfQp9OwoKc3RydWN0IEhlYXZ5CnsKICBIZWF2eSgpIHsgY291dCA8PCAiSGVhdnkoKSI8PGVuZGw7IH0KICBIZWF2eShjb25zdCBIZWF2eSYpIHsgY291dCA8PCAiSGVhdnkoY29uc3QgSGVhdnkmKSI8PGVuZGw7IH0KICAvL0hlYXZ5KGNvbnN0IExpZ2h0JikgeyBjb3V0IDw8ICJIZWF2eShjb25zdCBMaWdodCYpIjw8ZW5kbDsgfQogIH5IZWF2eSgpIHsgY291dCA8PCAifkhlYXZ5KCkiPDxlbmRsOyB9CgogIG9wZXJhdG9yIExpZ2h0KCkgeyBjb3V0IDw8ICJvcGVyYXRvciBMaWdodCgpIjw8ZW5kbDsgTGlnaHQgbDsgcmV0dXJuIGw7IH0KfTsKCkxpZ2h0IHRlcm5hcnkoSGVhdnkqIGgpCnsKICBjb3V0IDw8ICJ0ZXJuYXJ5Ijw8ZW5kbDsKICByZXR1cm4gaCA/ICpoIDogTGlnaHQoKTsKfQoKCmludCBtYWluKCkKewogIEhlYXZ5IGg7CiAgTGlnaHQgbCA9IHRlcm5hcnkoJmgpOwoKICBjb3V0IDw8ICJyZXR1cm4iPDxlbmRsOwogIHJldHVybiAwOwp9Cg==