#include <iostream>
#include <sstream>
#include <iomanip>
struct MyStream
{
mutable std::ostringstream ss;
MyStream() {}
MyStream(std::ostringstream & oss) { ss << oss.str(); }
};
typedef std::ostream & (*manipulator_t) (std::ostream &);
const MyStream & operator << (const MyStream & s, manipulator_t m)
{
s.ss << m;
return s;
}
template <class T>
const MyStream & operator << (const MyStream & s, T v)
{
s.ss << v;
return s;
}
void MyPrint(const MyStream & s)
{
std::cout << "logged: " << s.ss.str();
}
int main()
{
MyPrint(MyStream() << "true && false == " << std::boolalpha << (true && false) << std::endl);
std::ostringstream oss;
oss << std::setw(22) << "Hello, World!" << std::endl;
MyPrint(oss);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPGlvbWFuaXA+CgpzdHJ1Y3QgTXlTdHJlYW0KewogICAgbXV0YWJsZSBzdGQ6Om9zdHJpbmdzdHJlYW0gc3M7CgogICAgTXlTdHJlYW0oKSB7fQogICAgTXlTdHJlYW0oc3RkOjpvc3RyaW5nc3RyZWFtICYgb3NzKSB7IHNzIDw8IG9zcy5zdHIoKTsgfQp9OwoKdHlwZWRlZiBzdGQ6Om9zdHJlYW0gJiAoKm1hbmlwdWxhdG9yX3QpIChzdGQ6Om9zdHJlYW0gJik7Cgpjb25zdCBNeVN0cmVhbSAmIG9wZXJhdG9yIDw8IChjb25zdCBNeVN0cmVhbSAmIHMsIG1hbmlwdWxhdG9yX3QgbSkKewogICAgcy5zcyA8PCBtOwogICAgcmV0dXJuIHM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgpjb25zdCBNeVN0cmVhbSAmIG9wZXJhdG9yIDw8IChjb25zdCBNeVN0cmVhbSAmIHMsIFQgdikKewogICAgcy5zcyA8PCB2OwogICAgcmV0dXJuIHM7Cn0KCnZvaWQgTXlQcmludChjb25zdCBNeVN0cmVhbSAmIHMpCnsKICAgIHN0ZDo6Y291dCA8PCAibG9nZ2VkOiAiIDw8IHMuc3Muc3RyKCk7Cn0KCmludCBtYWluKCkKewogICAgTXlQcmludChNeVN0cmVhbSgpIDw8ICJ0cnVlICYmIGZhbHNlID09ICIgPDwgc3RkOjpib29sYWxwaGEgPDwgKHRydWUgJiYgZmFsc2UpIDw8IHN0ZDo6ZW5kbCk7CgogICAgc3RkOjpvc3RyaW5nc3RyZWFtIG9zczsKICAgIG9zcyA8PCBzdGQ6OnNldHcoMjIpIDw8ICJIZWxsbywgV29ybGQhIiA8PCBzdGQ6OmVuZGw7CiAgICBNeVByaW50KG9zcyk7Cn0=