В OS X простая программа на C ++ дает неверные результаты (которые являются результатом параметров командной строки «c ++ 03» против «c ++ 11»)

Эта простая программа (при компиляции в Linux) ПРАВИЛЬНО даст два разных ответа в зависимости от того, скомпилирована ли она с-std=c++0x или нет.

Проблема: я не могу воспроизвести то же самое на OS X (Mountain Lion, 10.8 SDK). Что мне не хватает?

#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;
}

Чтобы понять, что я имею в виду, сделайте следующее (сначала для Linux, просто чтобы посмотреть, как это должно работать):

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

Первый напечатает шестнадцатеричный адрес, второй напечатает «Hello». Это правильное поведение и потому, что оператор<< разрешает две разные вещи (в C ++ 03 нет ссылок на rvalue, так что поехали).

Теперь попробуйте то же самое на OS X:

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

(Это правильно производит шестнадцатеричный вывод.)

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

(Упс ... все еще шестнадцатеричный вывод ... Мы находимся в режиме C ++ 11x, но, возможно, правильные заголовки не используются?)

ПРИМЕЧАНИЕ: версия компилятора находится здесь:

> 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

ПРИМЕЧАНИЕ. Это не проблема C ++ как таковая, а проблема сборки OS X. Для тех, кто заинтересован, причина того, что он дает разные результаты с C ++ 03 и C ++ 11, выделена ниже в одном из ответов.

Ответы на вопрос(2)

Ваш ответ на вопрос