Imprimir una cadena en un objeto de flujo temporal en C ++

Tengo un tipo especial de Ostringstream al que estoy tratando de enviar texto como un objeto temporal, pero tengo algunos problemas. Para ser claros, esto es esencialmente lo que quiero hacer:

ostringstream() << "PARTY DOWN!" << endl;

Ahora antes de decir: "¡Pero Zack, ese código no vale nada! El objeto se destruye al final de la línea, ¿cómo podría saber si hiciera algo?", Escúchame. No trato de hacer esto con corrientes de ostring simples, sino con una clase derivada en la que el destructor realmente proporciona una ruta para que los datos salgan del objeto. Entonces, en realidad, se parece mucho más a esto:

specialstringstream() << "PARTY DOWN!" << endl;

Where specialstringstream tiene un destructor que volca el texto en otra parte.

No entraré en demasiados detalles sobre por qué hago esto. Tendrás que confiar en mí porque tiene sentido lo que necesito hacer y encaja perfectamente en una base de código gigantesca existente.

Aquí está el problema: cuando hago esto, todo se compila y se ejecuta, pero obtengo una dirección de puntero impresa en mi salida en lugar de "PARTY DOWN!" cuerda. Determiné que esto está sucediendo porque el operador elegido por el compilador para realizar la salida de flujo esostream& operator<< (const void* val), noostream& operator<< (ostream& out, const char* s ).

Tengo una vaga idea de por qué, pero no sé cómo solucionarlo. ¿Qué puedo hacer para que char * s se imprima en una instancia temporal de un flujo de cadena?

Aquí hay una versión corta del objeto SpecialStringStream que muestra el comportamiento:

class SpecialStringStream : public ostringstream
{
  public:
    SpecialStringStream(ostream* regularStream)
    {
      regularStream_ = regularStream;
    }

    ~SpecialStringStream()
    {
      if (regularStream_ != NULL)
        (*regularStream_) << str(); 
    }

  private:
    ostream* regularStream_;
};

Cuando hago algo como:SpecialStringStream(someStreamPtr) << "PARTY DOWN!" << endl;, Obtengo una dirección de puntero como "00444D60" en mi salida en lugar del mensaje.

EDIT: Dado que soy un usuario demasiado nuevo para responder mi propia pregunta, esto es lo que resolví gracias a todas las respuestas.

Se me ocurrió la siguiente solución, que funciona con Visual C ++ 8 y todos los otros compiladores que necesitaba. Creé un operador de plantilla que básicamente despoja un const SpecialStringStream de su constidad, lo convierte en un ostream y deja que los operadores de ostream hagan lo suyo. ¡Siéntase libre de romperlo en pedazos en los comentarios y advertirme de todos los posibles errores horribles que he introducido!

template <class T>
std::ostream& operator<<(const SpecialStringStream &o, T msg)
{
    return static_cast<std::ostream&>(const_cast<SpecialStringStream&>(o)) << msg;
}

Respuestas a la pregunta(4)

Su respuesta a la pregunta