#include <iostream>
#include <string>
#include <cstdlib>
#include <cstring>
class StrStrTest
{
public:
StrStrTest(const std::string& ba)
{
a = (char*)calloc(1, ba.length() + 1);
strcpy(a, ba.c_str());
}
virtual ~StrStrTest()
{
free(a);
}
private:
char* a;
friend std::basic_ostream<char>& operator << (std::basic_ostream<char>& ss, const StrStrTest& a);
friend std::basic_istream<char>& operator >> (std::basic_istream<char>& ss, const StrStrTest& a);
};
std::basic_ostream<char>& operator << (std::basic_ostream<char>& ss, const StrStrTest& a)
{
ss << a.a;
return ss;
}
std::basic_istream<char>& operator >> (std::basic_istream<char>& ss, const StrStrTest& a)
{
ss >> a.a;
// a.a = NULL;
return ss;
}
int main()
{
StrStrTest bb("foo");
std::cin >> bb;
std::cout << bb;
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KICAgICNpbmNsdWRlIDxzdHJpbmc+CiAgICAjaW5jbHVkZSA8Y3N0ZGxpYj4KICAgICNpbmNsdWRlIDxjc3RyaW5nPgoKICAgIGNsYXNzIFN0clN0clRlc3QKICAgIHsKICAgIHB1YmxpYzoKICAgICAgICBTdHJTdHJUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBiYSkKICAgICAgICB7CiAgICAgICAgICAgIGEgPSAoY2hhciopY2FsbG9jKDEsIGJhLmxlbmd0aCgpICsgMSk7CiAgICAgICAgICAgIHN0cmNweShhLCBiYS5jX3N0cigpKTsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgflN0clN0clRlc3QoKQogICAgICAgIHsKICAgICAgICAgICAgZnJlZShhKTsKICAgICAgICB9CiAgICBwcml2YXRlOgogICAgICAgIGNoYXIqIGE7CgogICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08Y2hhcj4mIG9wZXJhdG9yIDw8IChzdGQ6OmJhc2ljX29zdHJlYW08Y2hhcj4mIHNzLCBjb25zdCBTdHJTdHJUZXN0JiBhKTsKICAgICAgICBmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPGNoYXI+JiBvcGVyYXRvciA+PiAoc3RkOjpiYXNpY19pc3RyZWFtPGNoYXI+JiBzcywgY29uc3QgU3RyU3RyVGVzdCYgYSk7CiAgICB9OwoKICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxjaGFyPiYgb3BlcmF0b3IgPDwgKHN0ZDo6YmFzaWNfb3N0cmVhbTxjaGFyPiYgc3MsIGNvbnN0IFN0clN0clRlc3QmIGEpCiAgICB7CiAgICAgICAgc3MgPDwgYS5hOwogICAgICAgIHJldHVybiBzczsKICAgIH0KCgogICAgc3RkOjpiYXNpY19pc3RyZWFtPGNoYXI+JiBvcGVyYXRvciA+PiAoc3RkOjpiYXNpY19pc3RyZWFtPGNoYXI+JiBzcywgY29uc3QgU3RyU3RyVGVzdCYgYSkKICAgIHsKICAgICAgICBzcyA+PiBhLmE7CiAgICAvLyAgICBhLmEgPSBOVUxMOwogICAgICAgIHJldHVybiBzczsKICAgIH0KCiAgICBpbnQgbWFpbigpCiAgICB7CiAgICAgICAgU3RyU3RyVGVzdCBiYigiZm9vIik7CiAgICAgICAgc3RkOjpjaW4gPj4gYmI7CiAgICAgICAgc3RkOjpjb3V0IDw8IGJiOwogICAgfQ==