En OS X, el simple programa C ++ da resultados incorrectos (que son el resultado de las opciones de línea de comandos 'c ++ 03' vs 'c ++ 11')

Este sencillo programa (cuando se compila en Linux) dará CORRECTAMENTE dos respuestas diferentes en función de si está compilado con-std=c++0x o no.

Problema: no puedo reproducir lo mismo en OS X (Mountain Lion, 10.8 SDK). ¿Qué me estoy perdiendo?

#include <iostream>
#include <sstream>

class Thing : public std::ostringstream
{
public:
    Thing() : std::ostringstream() {}
    virtual ~Thing() { std::cerr << str(); }
};

int main(int argc, const char * argv[]) {
    Thing() << "Hello" << std::endl;
    return 0;
}

Para ver lo que quiero decir, haga lo siguiente (en Linux primero, solo para ver cómo debería funcionar):

> g++ main.cpp
> ./a.out
0x401471
> g++ -std=c++0x main.cpp
> ./a.out
Hello

La primera imprimirá una dirección hexadecimal, la segunda imprimirá "Hola". Este es el comportamiento correcto y es porque el operador<< se resuelve en dos cosas diferentes (no hay referencias de valor en C ++ 03, así que ya está).

Ahora, intente lo mismo en OS X:

> xcrun c++ main.cpp
> ./a.out
0x10840dd88

(Esto produce correctamente la salida hexadecimal.)

> xcrun c++ -std=c++0x main.cpp
> ./a.out
0x10840dd88

(Vaya ... aún la salida hexadecimal ... Estamos en modo C ++ 11x, pero ¿quizás no se usan los encabezados correctos?)

NOTA: La versión del compilador está aquí:

> xcrun c++ --version
Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin12.2.0
Thread model: posix

NOTA: Este no es un problema de C ++ per se, sino un problema de compilación de OS X. Para aquellos que estén interesados, la razón por la que produce resultados diferentes con C ++ 03 y C ++ 11 se destaca a continuación en una de las respuestas.

Respuestas a la pregunta(2)

Su respuesta a la pregunta