2012-06-12 14 views
11

Dzisiejsze aktualizacje Apple Narzędzia wiersza poleceń dla Xcode, a następnie uaktualnienia dzwonią od 318.0.58 do 318.0.61.lista inicjalizacyjna w Clang

Próbowałem użyć listy inicjalizacyjnej, ale nie mogę skompilować poniżej kodu.

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

Potem próbowałem skompilować.

dziennika Błąd

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. 

Z drugiej strony, mogę skompilować powyższy kod z gcc-4.7.1-RC-20120606.

Czy lista inicjatora Clang wsparcia Apple nie jest obsługiwana? wersja Clang:

$ 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 

Odpowiedz

11

Spróbuj określając -std=c++0x (jak słusznie zauważył @jweyrich) jako część linii poleceń clang. Wartością domyślną dla clang jest tryb C++ 98. Listy inicjalizacyjne są funkcją C++ 11.

Również z języka C++ 98 i C++ 11 support page można sprawdzić stan różnych nowych funkcji standardowych C++. Na przykład listy inicjalizatorów są dostępne w wersji 3.1 (i nowszych).

+0

dzyń Apple nie może rozpoznać '-std = C++ 11' – user1214292

+1

@ user1214292: Uznaje' -std = C++ 0x' chociaż. – jweyrich

+0

@jweyrich Ale wynik pozostanie niezmieniony :( – user1214292

7

kompilacji za pomocą polecenia:

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

Zauważ, że -std=c++11 działa również. W moim komputerze, prowadzenie:

$ clang --version 

skutkuje:

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