#include <iostream>
#include <fstream>
using namespace std;
class LoggedStream {
private:
ostream& out;
public:
LoggedStream(ostream& o):out(o){}
template<typename T>
const LoggedStream& operator<<(const T& v) const {
out << v;
return *this;
}
LoggedStream const& operator<<(std::ostream& (*func)(std::ostream&)) const {
func(out);
return *this;
}
};
int main(int,char**) {
LoggedStream Log1(std::cout);
Log1 << 1 << " 2" << endl << 3 << " 4" << endl;
//
std::ofstream ofs("test.txt", std::ofstream::out);
LoggedStream Log2(ofs);
Log2 << 1 << " 2" << endl << 3 << " 4" << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBMb2dnZWRTdHJlYW0gewogIHByaXZhdGU6CiAgICBvc3RyZWFtJiBvdXQ7CiAgcHVibGljOgogICAgTG9nZ2VkU3RyZWFtKG9zdHJlYW0mIG8pOm91dChvKXt9CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgY29uc3QgTG9nZ2VkU3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IFQmIHYpIGNvbnN0IHsKICAgICAgb3V0IDw8IHY7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIExvZ2dlZFN0cmVhbSBjb25zdCYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mICgqZnVuYykoc3RkOjpvc3RyZWFtJikpIGNvbnN0IHsgCiAgICAgIGZ1bmMob3V0KTsgCiAgICAgIHJldHVybiAqdGhpczsgCiAgICB9Cn07CgppbnQgbWFpbihpbnQsY2hhcioqKSB7CiAgTG9nZ2VkU3RyZWFtIExvZzEoc3RkOjpjb3V0KTsKICBMb2cxIDw8IDEgPDwgIiAyIiA8PCBlbmRsIDw8IDMgPDwgIiA0IiA8PCBlbmRsOwogIC8vCiAgc3RkOjpvZnN0cmVhbSBvZnMoInRlc3QudHh0Iiwgc3RkOjpvZnN0cmVhbTo6b3V0KTsKICBMb2dnZWRTdHJlYW0gTG9nMihvZnMpOwogIExvZzIgPDwgMSA8PCAiIDIiIDw8IGVuZGwgPDwgMyA8PCAiIDQiIDw8IGVuZGw7Cn0=