Unter OS X liefert ein einfaches C ++ - Programm falsche Ergebnisse (die sich aus den Befehlszeilenoptionen 'c ++ 03' gegenüber 'c ++ 11' ergeben).

Dieses einfache Programm (wenn es unter Linux kompiliert wurde) gibt RICHTIG zwei unterschiedliche Antworten, je nachdem, ob es mit kompiliert wurde-std=c++0x oder nicht.

Problem: Ich kann unter OS X nicht dasselbe reproduzieren (Mountain Lion, 10.8 SDK). Was vermisse ich?

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

Um zu sehen, was ich meine, gehen Sie wie folgt vor (zuerst unter Linux, nur um zu sehen, wie es funktionieren soll):

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

Die erste gibt eine hexadezimale Adresse aus, die zweite "Hallo". Dies ist korrektes Verhalten und liegt am Bediener<< löst zwei verschiedene Dinge auf (in C ++ 03 gibt es keine R-Wert-Referenzen, also können Sie loslegen).

Versuchen Sie jetzt dasselbe unter OS X:

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

(Dies erzeugt korrekterweise die Hex-Ausgabe.)

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

(Hoppla ... immer noch die Hex-Ausgabe ... Wir befinden uns im C ++ 11x-Modus, aber möglicherweise werden nicht die richtigen Header verwendet?)

HINWEIS: Die Version des Compilers finden Sie hier:

> 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

HINWEIS: Dies ist kein C ++ - Problem an sich, sondern ein OS X-Build-Problem. Für diejenigen, die interessiert sind, ist der Grund, dass es mit C ++ 03 und C ++ 11 unterschiedliche Ergebnisse erzeugt, unten in einer der Antworten hervorgehoben.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage