#include <iostream>
using namespace std;
struct Tracer {
Tracer(void)
:m_name("(none)")
{
std::cout << "[" << m_name << "] " << __PRETTY_FUNCTION__ << std::endl;
}
Tracer(const std::string & name)
:m_name(name)
{
std::cout << "[" << m_name << "] " << __PRETTY_FUNCTION__ << std::endl;
}
Tracer(const Tracer & other)
:m_name("from " + other.m_name)
{
std::cout << "[" << m_name << "] " << __PRETTY_FUNCTION__ << std::endl;
}
Tracer & operator=(const Tracer & other) {
m_name = "from " + other.m_name;
std::cout << "[" << m_name << "] " << __PRETTY_FUNCTION__ << std::endl;
return *this;
}
~Tracer() {
std::cout << "[" << m_name << "] " << __PRETTY_FUNCTION__ << std::endl;
}
std::string m_name;
};
struct A {
A() : a( "init. list" ) {}
Tracer a;
};
struct B {
B() {
b = Tracer( "c-tor" );
}
Tracer b;
};
int main() {
{
A x;
}
cout << "1" << endl;
{
B x;
}
cout << "2" << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IFRyYWNlciB7CiAgIFRyYWNlcih2b2lkKQogICAgICA6bV9uYW1lKCIobm9uZSkiKQogICB7CiAgICAgIHN0ZDo6Y291dCA8PCAiWyIgPDwgbV9uYW1lIDw8ICJdICAgICIgPDwgX19QUkVUVFlfRlVOQ1RJT05fXyA8PCBzdGQ6OmVuZGw7CiAgIH0KICAgVHJhY2VyKGNvbnN0IHN0ZDo6c3RyaW5nICYgbmFtZSkKICAgICAgOm1fbmFtZShuYW1lKQogICB7CiAgICAgIHN0ZDo6Y291dCA8PCAiWyIgPDwgbV9uYW1lIDw8ICJdICAgICIgPDwgX19QUkVUVFlfRlVOQ1RJT05fXyA8PCBzdGQ6OmVuZGw7CiAgIH0KICAgVHJhY2VyKGNvbnN0IFRyYWNlciAmIG90aGVyKQogICAgICA6bV9uYW1lKCJmcm9tICIgKyBvdGhlci5tX25hbWUpCiAgIHsKICAgICAgc3RkOjpjb3V0IDw8ICJbIiA8PCBtX25hbWUgPDwgIl0gICAgIiA8PCBfX1BSRVRUWV9GVU5DVElPTl9fIDw8IHN0ZDo6ZW5kbDsKICAgfQogICBUcmFjZXIgJiBvcGVyYXRvcj0oY29uc3QgVHJhY2VyICYgb3RoZXIpIHsKICAgICAgbV9uYW1lID0gImZyb20gIiArIG90aGVyLm1fbmFtZTsKICAgICAgc3RkOjpjb3V0IDw8ICJbIiA8PCBtX25hbWUgPDwgIl0gICAgIiA8PCBfX1BSRVRUWV9GVU5DVElPTl9fIDw8IHN0ZDo6ZW5kbDsKICAgICAgcmV0dXJuICp0aGlzOwogICB9CiAgIH5UcmFjZXIoKSB7CiAgICAgIHN0ZDo6Y291dCA8PCAiWyIgPDwgbV9uYW1lIDw8ICJdICAgICIgPDwgX19QUkVUVFlfRlVOQ1RJT05fXyA8PCBzdGQ6OmVuZGw7CiAgIH0KCiAgIHN0ZDo6c3RyaW5nIG1fbmFtZTsKfTsKCnN0cnVjdCBBIHsKCUEoKSA6IGEoICJpbml0LiBsaXN0IiApIHt9CiAgICBUcmFjZXIgYTsKfTsKCnN0cnVjdCBCIHsKCUIoKSB7CgkJYiA9IFRyYWNlciggImMtdG9yIiApOwoJfQogICAgVHJhY2VyIGI7Cn07CgoKaW50IG1haW4oKSB7Cgl7CgkJQSB4OwoJfQoJY291dCA8PCAiMSIgPDwgZW5kbDsKCXsKCQlCIHg7Cgl9Cgljb3V0IDw8ICIyIiA8PCBlbmRsOwoJcmV0dXJuIDA7Cn0=