¿Me podría ayudar a encontrar un problema en el código siguiente (código es similar al C++ stream as a parameter when overloading operator<<):"error: no puede competir con 'operador <<" cuando se trabaja con std :: string
#include <iostream>
#include <string>
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;
}
Todo funciona bien hasta que descomente la línea que contiene "mundo". En este caso, GCC produce el error : no coincide con el 'operador < <' en ...
Es interesante que VS2008 no tenga ningún problema con este código.
¡Gracias!
Visual Studio hace una gran cantidad de conversiones de tipo que otros compiladores no harán. Pruebe std :: string ("world") .c_str(); – steveg89