#include <iostream>
#include <sstream>
class Logger {
std::stringstream ss;
public:
~Logger() {
std::cout<< ss.str();
}
// General for all types supported by stringstream
template<typename T>
Logger& operator<<(const T& arg) {
ss << arg;
return *this;
}
// You can override for specific types
Logger& operator<<(bool b) {
ss << (b? "Yep" : "Nope");
return *this;
}
};
int main() {
Logger() << "Is the answer " << 42 << "? " << true;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KCgpjbGFzcyBMb2dnZXIgewogICAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CnB1YmxpYzoKICAgIH5Mb2dnZXIoKSB7CiAgICAgIHN0ZDo6Y291dDw8IHNzLnN0cigpOwogICAgfQoKICAgIC8vIEdlbmVyYWwgZm9yIGFsbCB0eXBlcyBzdXBwb3J0ZWQgYnkgc3RyaW5nc3RyZWFtCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgTG9nZ2VyJiBvcGVyYXRvcjw8KGNvbnN0IFQmIGFyZykgewogICAgICAgc3MgPDwgYXJnOwogICAgICAgcmV0dXJuICp0aGlzOwogICAgfQogICAKICAgIC8vIFlvdSBjYW4gb3ZlcnJpZGUgZm9yIHNwZWNpZmljIHR5cGVzCiAgICBMb2dnZXImIG9wZXJhdG9yPDwoYm9vbCBiKSB7ICAKICAgICAgIHNzIDw8IChiPyAiWWVwIiA6ICJOb3BlIik7CiAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cn07CgoKaW50IG1haW4oKSB7CiAgICBMb2dnZXIoKSA8PCAiSXMgdGhlIGFuc3dlciAiIDw8IDQyIDw8ICI/ICIgPDwgdHJ1ZTsKCXJldHVybiAwOwp9