#include<string>
#include<iostream>
namespace notstd {
namespace adl_helper {
using std::to_string;
template<class T>
std::string as_string( T&& t ) {
return to_string( std::forward<T>(t) );
}
}
template<class T>
std::string to_string( T&& t ) {
return adl_helper::as_string(std::forward<T>(t));
}
}
namespace bob{
class my_class{
public:
friend std::string to_string(my_class const& self) {
return "I am " + notstd::to_string(self.i);
}
int i;
};
}
int main(){
bob::my_class x{1};
std::cout << notstd::to_string(x)<<"\n";
}
I2luY2x1ZGU8c3RyaW5nPgojaW5jbHVkZTxpb3N0cmVhbT4KCm5hbWVzcGFjZSBub3RzdGQgewogIG5hbWVzcGFjZSBhZGxfaGVscGVyIHsKICAgIHVzaW5nIHN0ZDo6dG9fc3RyaW5nOwoKICAgIHRlbXBsYXRlPGNsYXNzIFQ+CiAgICBzdGQ6OnN0cmluZyBhc19zdHJpbmcoIFQmJiB0ICkgewogICAgICByZXR1cm4gdG9fc3RyaW5nKCBzdGQ6OmZvcndhcmQ8VD4odCkgKTsKICAgIH0KICB9CiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBzdGQ6OnN0cmluZyB0b19zdHJpbmcoIFQmJiB0ICkgewogICAgcmV0dXJuIGFkbF9oZWxwZXI6OmFzX3N0cmluZyhzdGQ6OmZvcndhcmQ8VD4odCkpOwogIH0KfQpuYW1lc3BhY2UgYm9iewpjbGFzcyBteV9jbGFzc3sKcHVibGljOgogIGZyaWVuZCBzdGQ6OnN0cmluZyB0b19zdHJpbmcobXlfY2xhc3MgY29uc3QmIHNlbGYpIHsKICAgIHJldHVybiAiSSBhbSAiICsgbm90c3RkOjp0b19zdHJpbmcoc2VsZi5pKTsKICB9CiAgaW50IGk7Cn07Cn0KaW50IG1haW4oKXsKCWJvYjo6bXlfY2xhc3MgeHsxfTsKCXN0ZDo6Y291dCA8PCBub3RzdGQ6OnRvX3N0cmluZyh4KTw8IlxuIjsKfQ==