#include <iostream>
bool isTrue()
{
return false;
}
class A
{
public:
A()
{
std::cout << "A() called" << std::endl;
}
A(const A& ref)
{
std::cout << "A(const A& ref) called" << std::endl;
}
A& operator=(const A& ref)
{
std::cout << "A& operator=(const A& ref)" << std::endl; this->member = ref.member;
}
A(char* string): member(10)
{
std::cout << "A(char* string) called" << std::endl;
}
A(int value): member(2)
{
std::cout << "A(value) called" << std::endl;
}
~A()
{
std::cout <<"destructor called" << std::endl;
}
void check()
{
std::cout <<"called the " << member << " constructor" << std::endl;
}
int member;
};
int main()
{
A a = isTrue() ? A("string") : A(10);
a.check();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKYm9vbCBpc1RydWUoKQp7CiAgICByZXR1cm4gZmFsc2U7Cn0KCmNsYXNzIEEKewpwdWJsaWM6CiAgICBBKCkgCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJBKCkgY2FsbGVkIiA8PCBzdGQ6OmVuZGw7IAogICAgfQoKICAgIEEoY29uc3QgQSYgcmVmKSAKICAgIHsgCiAgICAgICAgc3RkOjpjb3V0IDw8ICJBKGNvbnN0IEEmIHJlZikgY2FsbGVkIiA8PCBzdGQ6OmVuZGw7IAogICAgfQoKICAgIEEmIG9wZXJhdG9yPShjb25zdCBBJiByZWYpIAogICAgeyAKICAgICAgICBzdGQ6OmNvdXQgPDwgIkEmIG9wZXJhdG9yPShjb25zdCBBJiByZWYpIiA8PCBzdGQ6OmVuZGw7IHRoaXMtPm1lbWJlciA9IHJlZi5tZW1iZXI7CiAgICB9CiAgICAKICAgIEEoY2hhciogc3RyaW5nKTogbWVtYmVyKDEwKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiQShjaGFyKiBzdHJpbmcpIGNhbGxlZCIgPDwgc3RkOjplbmRsOwogICAgfQoKICAgIEEoaW50IHZhbHVlKTogbWVtYmVyKDIpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJBKHZhbHVlKSBjYWxsZWQiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KCiAgICB+QSgpIAogICAgeyAKICAgICAgICBzdGQ6OmNvdXQgPDwiZGVzdHJ1Y3RvciBjYWxsZWQiIDw8IHN0ZDo6ZW5kbDsgCiAgICB9CgogICAgdm9pZCBjaGVjaygpIAogICAgewogICAgCXN0ZDo6Y291dCA8PCJjYWxsZWQgdGhlICIgPDwgbWVtYmVyIDw8ICIgY29uc3RydWN0b3IiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KICAgIAogICAgaW50IG1lbWJlcjsKfTsKCmludCBtYWluKCkgCnsKICAgIEEgYSA9IGlzVHJ1ZSgpID8gQSgic3RyaW5nIikgOiBBKDEwKTsKICAgIGEuY2hlY2soKTsKCiAgICByZXR1cm4gMDsKfQ==