#include <iostream>
struct A {
A(int) { std::cout << "A(int)\n"; }
A(int, int) { std::cout << "A(int, int)\n"; }
A(A const &) { std::cout << "A(A const &)\n"; }
A(A &&) { std::cout << "A(A &&)\n"; }
A &operator=(A const &) { std::cout << "operator=(A const &)\n"; return *this; }
A &operator=(A &&) { std::cout << "operator=(A &&)\n"; return *this; };
~A() { std::cout << "~A()\n"; }
};
A handleSomeCase(bool someCase) {
if(someCase)
return A(1, 2);
else
return A(3);
}
int main(int argc, char *argv[]) {
A a = handleSomeCase(argc > 1);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEEgewogICAgQShpbnQpIHsgc3RkOjpjb3V0IDw8ICJBKGludClcbiI7IH0KICAgIEEoaW50LCBpbnQpIHsgIHN0ZDo6Y291dCA8PCAiQShpbnQsIGludClcbiI7IH0KCiAgICBBKEEgY29uc3QgJikgeyBzdGQ6OmNvdXQgPDwgIkEoQSBjb25zdCAmKVxuIjsgfQogICAgQShBICYmKSB7ICBzdGQ6OmNvdXQgPDwgIkEoQSAmJilcbiI7IH0KICAgIAogICAgQSAmb3BlcmF0b3I9KEEgY29uc3QgJikgeyBzdGQ6OmNvdXQgPDwgIm9wZXJhdG9yPShBIGNvbnN0ICYpXG4iOyByZXR1cm4gKnRoaXM7IH0KICAgIEEgJm9wZXJhdG9yPShBICYmKSB7IHN0ZDo6Y291dCA8PCAib3BlcmF0b3I9KEEgJiYpXG4iOyByZXR1cm4gKnRoaXM7IH07CiAgICAKICAgIH5BKCkgeyBzdGQ6OmNvdXQgPDwgIn5BKClcbiI7IH0KfTsKCkEgaGFuZGxlU29tZUNhc2UoYm9vbCBzb21lQ2FzZSkgewogICAgaWYoc29tZUNhc2UpCiAgICAgICAgcmV0dXJuIEEoMSwgMik7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuIEEoMyk7Cn0KCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKICAgIEEgYSA9IGhhbmRsZVNvbWVDYXNlKGFyZ2MgPiAxKTsKfQ==