¿Por qué falla la escritura en la transmisión temporal?

Considere el siguiente código:

#include <sstream>
#include <iostream>

class Foo : public std::stringstream {
public:
    ~Foo() { std::cout << str(); }
};

int main()
{
    Foo foo;
    foo << "Test1" << std::endl;

    Foo() << "Test2" << std::endl;

    return 0;
}

Cuando ejecuto esto, me da:

004177FC
Test1

No entiendo por qué el segundo ejemplo me da galimatías. El temporal debería vivir hasta que se evalúe la expresión completa, entonces, ¿por qué no se comporta igual que el primer ejemplo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta