2012-06-12 7 views
11

Heute aktualisiert Apple die Befehlszeilentools für Xcode und aktualisiert dann den Clang von 318.0.58 auf 318.0.61.Initializer-Liste in Clang

Ich habe versucht, Initialisierungsliste zu verwenden, kann aber nicht unter Code kompilieren.

#include <iostream> 
#include <random> 
#include <initializer_list> 

int main() 
{ 
    std::mt19937 rng(time(NULL)); 

    std::initializer_list<double> probabilities = 
    { 
     0.5, 0.1, 0.1, 0.1, 0.1, 0.1 
    }; 

    std::discrete_distribution<> cheat_dice (probabilities); 

    int a[6] = { }; 

    for (int i = 0 ; i != 1000; ++i) 
    { 
     ++a[cheat_dice(rng)]; 
    } 

    for (int i = 0; i != 6; ++i) 
    { 
     std::cout << i + 1 << "=" << a[i] << std::endl; 
    } 
} 

Dann habe ich versucht zu kompilieren.

Fehlerprotokoll

foo.cpp:9:10: error: no member named 'initializer_list' in namespace 'std' 
    std::initializer_list<double> probabilities = 
    ~~~~~^ 
foo.cpp:9:33: error: expected '(' for function-style cast or type construction 
    std::initializer_list<double> probabilities = 
          ~~~~~~^ 
foo.cpp:9:35: error: use of undeclared identifier 'probabilities' 
    std::initializer_list<double> probabilities = 
           ^
foo.cpp:10:5: error: expected expression 
    { 
    ^
foo.cpp:14:46: error: use of undeclared identifier 'probabilities' 
    std::discrete_distribution<> cheat_dice (probabilities); 
              ^
5 errors generated. 

Auf der anderen Seite kann ich über Code mit gcc-4.7.1-RC-20.120.606 kompiliert.

$ g++ -std=c++11 foo.cpp 

Unterstützt Apples Clang keine Initialisiererliste? Clang Version:

$ clang++ -v 
Apple clang version 3.1 (tags/Apple/clang-318.0.61) (based on LLVM 3.1svn) 
Target: x86_64-apple-darwin11.4.0 
Thread model: posix 

Antwort

11

Versuchen von -std=c++0x Angabe (wie @jweyrich korrekt angegeben) als Teil der clang Befehlszeile. Der Standardwert für clang ist der C++ 98-Modus. Initialisierungslisten sind eine C++ 11-Funktion.

Außerdem können Sie aus dem C++ C++ 98 und C++ 11 support page den Status verschiedener neuer C++ - Standardfunktionen überprüfen. Zum Beispiel sind Initialisierungslisten in 3.1 (und höher) verfügbar.

+0

Apples Klirren nicht erkennen kann '-std = C++ 11' – user1214292

+1

@ user1214292: Es erkennt' -std = C++ 0x' obwohl. – jweyrich

+0

@jweyrich Aber das Ergebnis wird unverändert :( – user1214292

7

Compile dem Befehl:

clang++ -stdlib=libc++ -std=c++0x foo.cpp 

Beachten Sie, dass -std=c++11 funktioniert auch. In meinem Rechner läuft:

$ clang --version 

Ergebnisse in:

Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn) 
Target: x86_64-apple-darwin12.2.0