«ошибка :не соответствует оператору <<» при работе со стандартной строкой ::

Не могли бы вы помочь мне найти проблему в следующем коде (код аналогичен C++ stream в качестве параметра при перегрузке оператора):

#include 
#include 

class logger
{
  public:
    void init( std::ostream& ostr )
    {
        stream = &ostr;
    }

    template< typename t >
    logger& operator <<( t& data )
    {
        *stream << data;
        return *this;
    }

    logger& operator <<( std::ostream& (*manip)(std::ostream &) )
    {
        manip( *stream );
        return *this;
    }

    logger& operator <<( std::ios_base& (*manip)(std::ios_base&) )
    {
        manip( *stream );
        return *this;
    }

  private:
    std::ostream* stream;
};

int main( int argc, char* argv[] )
{
    logger log;
    log.init( std::cout );
    log << "Hello" << std::endl;
    //log << std::string( "world" ) << std::endl;

    return 0;
}

Все работает нормально, пока я не раскомментирую строку, содержащую «мир». В этом случае GCC производит ошибка :не соответствует оператору

Интересно, что у VS2008 нет проблем с этим кодом.

Благодарю вас!

5
задан Community 23 May 2017 в 12:20
поделиться