He estado escribiendo un std::streambuf
personalizado como parte de un sistema de registro. Sin embargo, tengo problemas con la primera pieza de salida de una transmisión que no está formateada correctamente.std :: ostream no formateo const char * correctamente la primera vez que se usa
Aquí es un caso de prueba reducida que no utiliza ninguna costumbre streambuf
o ostream
clases:
#include <iostream>
int main()
{
std::streambuf *coutbuf = std::cout.rdbuf();
std::ostream(coutbuf) << "test" << ": writing to cout using a separate ostream." << std::endl;
return 0;
}
Compilación esto usando g ++:
$ g++ --version
g++ (Ubuntu 4.4.1-4ubuntu8) 4.4.1
$ g++ -o fail reduced-case.cpp
$ ./fail
0x400c80: writing to cout using a separate ostream.
Tenga en cuenta que la primera cadena literal (prueba " ") se está formateando como un puntero genérico (la dirección de la cadena se envía en hexadecimal), mientras que la segunda cadena literal está formateada correctamente.
Lo único que se me ocurre es que no es válido usar directamente un std::ostream
recién construido así (es decir, sin ponerlo en una variable). Si este es el caso, me gustaría saber qué es exactamente lo que lo hace inválido (supongo que no tiene nada que ver con iostremas específicamente, sino más bien con el orden de evaluación o las interacciones con los constructores o algo así). Si ese no es el problema, entonces ¿qué es?