#include <iostream>
struct Test {
std::string name;
std::string toString() const { return name; }
};
std::ostream & operator <<(std::ostream & o, const Test & t) {
return o << t.toString();
}
std::ostream & operator <<(std::ostream & o, const Test * t) {
return o << t->toString();
}
int main() {
Test t1;
t1.name = "foo";
Test * t2 = new Test();
t2->name = "foo";
std::cout << t1 << std::endl;
std::cout << t2 << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IFRlc3QgewogICAgc3RkOjpzdHJpbmcgbmFtZTsKICAgIHN0ZDo6c3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbmFtZTsgfQp9OwoKc3RkOjpvc3RyZWFtICYgb3BlcmF0b3IgPDwoc3RkOjpvc3RyZWFtICYgbywgY29uc3QgVGVzdCAmIHQpIHsKICAgIHJldHVybiBvIDw8IHQudG9TdHJpbmcoKTsKfQpzdGQ6Om9zdHJlYW0gJiBvcGVyYXRvciA8PChzdGQ6Om9zdHJlYW0gJiBvLCBjb25zdCBUZXN0ICogdCkgewogICAgcmV0dXJuIG8gPDwgdC0+dG9TdHJpbmcoKTsKfQoKaW50IG1haW4oKSB7CiAgICBUZXN0IHQxOwogICAgdDEubmFtZSA9ICJmb28iOwogICAgCiAgICBUZXN0ICogdDIgPSBuZXcgVGVzdCgpOwogICAgdDItPm5hbWUgPSAiZm9vIjsKICAgIAogICAgc3RkOjpjb3V0IDw8IHQxIDw8IHN0ZDo6ZW5kbDsKICAgIHN0ZDo6Y291dCA8PCB0MiA8PCBzdGQ6OmVuZGw7Cn0=