#include <iostream>
#include <iomanip>
#include <string>
class B
{
public:
B ();
B (const B& other);
B (B &&other);
~B ();
private:
int id;
static int current;
friend std::ostream &operator<< (std::ostream &, const B&);
};
int B::current = 0;
std::ostream &operator<< (std::ostream &out, const B& b)
{
return out << "B" << b.id;
}
B::B (B &&other) : id (current++)
{
std::cout << other << "=>" << *this << "*" << std::endl;
}
B::B (const B& other) : id (current++)
{
std::cout << *this << "(" << other << ")" << std::endl;
}
B::B () : id (current++)
{
std::cout << *this << "*" << std::endl;;
}
B::~B ()
{
std::cout << *this << "~" << std::endl;
}
B func (bool flag)
{
B t, f;
std::cout << "func(" << std::boolalpha << flag << ")" << std::endl;
return flag ? t : f;
}
int main ()
{
B b1 = func (true);
std::cout << "main" << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPHN0cmluZz4KCmNsYXNzIEIKewpwdWJsaWM6CiAgICBCICgpOwogICAgQiAoY29uc3QgQiYgb3RoZXIpOwogICAgQiAoQiAmJm90aGVyKTsKICAgIH5CICgpOwoKcHJpdmF0ZToKICAgIGludCBpZDsKICAgIHN0YXRpYyBpbnQgY3VycmVudDsKCiAgICBmcmllbmQgc3RkOjpvc3RyZWFtICZvcGVyYXRvcjw8IChzdGQ6Om9zdHJlYW0gJiwgY29uc3QgQiYpOwp9OwoKaW50IEI6OmN1cnJlbnQgPSAwOwoKc3RkOjpvc3RyZWFtICZvcGVyYXRvcjw8IChzdGQ6Om9zdHJlYW0gJm91dCwgY29uc3QgQiYgYikKewogICAgcmV0dXJuIG91dCA8PCAiQiIgPDwgYi5pZDsKfQoKQjo6QiAoQiAmJm90aGVyKSA6IGlkIChjdXJyZW50KyspCnsKICAgIHN0ZDo6Y291dCA8PCBvdGhlciA8PCAiPT4iIDw8ICp0aGlzIDw8ICIqIiA8PCBzdGQ6OmVuZGw7Cn0KCkI6OkIgKGNvbnN0IEImIG90aGVyKSA6IGlkIChjdXJyZW50KyspCnsKICAgIHN0ZDo6Y291dCA8PCAqdGhpcyA8PCAiKCIgPDwgb3RoZXIgPDwgIikiIDw8IHN0ZDo6ZW5kbDsKfQoKQjo6QiAoKSA6IGlkIChjdXJyZW50KyspCnsKICAgIHN0ZDo6Y291dCA8PCAqdGhpcyA8PCAiKiIgPDwgc3RkOjplbmRsOzsKfQoKQjo6fkIgKCkKewogICAgc3RkOjpjb3V0IDw8ICp0aGlzIDw8ICJ+IiA8PCBzdGQ6OmVuZGw7Cn0KCkIgZnVuYyAoYm9vbCBmbGFnKQp7CiAgICBCIHQsIGY7CgogICAgc3RkOjpjb3V0IDw8ICJmdW5jKCIgPDwgc3RkOjpib29sYWxwaGEgPDwgZmxhZyA8PCAiKSIgPDwgc3RkOjplbmRsOwoKICAgIHJldHVybiBmbGFnID8gdCA6IGY7Cn0KCmludCBtYWluICgpCnsKICAgIEIgYjEgPSBmdW5jICh0cnVlKTsKICAgIHN0ZDo6Y291dCA8PCAibWFpbiIgPDwgc3RkOjplbmRsOwoKICAgIHJldHVybiAwOwp9Cg==