#include <iostream>

class MyLogger {
public:
    MyLogger(std::ostream& logStream) 
    : logStream_(logStream)
    {}

    template<typename T>
    friend MyLogger& operator<<(MyLogger&, const T&);
private:
    std::ostream&  logStream_;
};

template<typename T>
MyLogger& operator<<(MyLogger& log, const T& value) {
    log.logStream_ << value;
    return log;
}

int main() {
    MyLogger log(std::cout);

    log << "Hello" << " World!";
}
