Не могли бы вы помочь мне найти проблему в следующем коде (код аналогичен 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 нет проблем с этим кодом.
Благодарю вас!