#include #include #include using namespace std; class Cout: private std::streambuf, public std::ostream { std::mutex d_mutex; public: Cout() : std::strembuf(std::cout.rdbuf()) std::ostream(this) {} }; template Cout &operator<<(Cout &out, Type const &value) { std::lock_guard{ out.d_mutex ); static_cast(*this) << value; }