2012-06-12 13 views
11

今日AppleはXcodeのコマンドラインツールをアップデートし、clangを318.0.58から318.0.61にアップグレードします。Clangの初期設定リスト

初期化リストを使用しようとしましたが、以下のコードをコンパイルできません。

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

次に、私はコンパイルしようとしました。一方

エラーログ

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. 

、私はGCC-4.7.1-RC-20120606とコードの上にコンパイルすることができます。

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

Appleのclangサポート初期化リストはありませんか? クランバージョン:clangコマンドラインの一部として(@jweyrichが正しく指摘したように)-std=c++0xを指定することで

$ 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 

答えて

11

してみてください。 clangのデフォルトはC++ 98モードです。初期化子リストはC++ 11の機能です。

また、clang C++ 98およびC++ 11 support pageから、さまざまな新しいC++標準機能の状態を確認できます。例えば、イニシャライザリストは3.1(以上)で利用可能です。コマンドを使用して

+0

'認識することができませんAppleの打ち鳴らす-std = C++ '11 – user1214292

+1

user1214292 @:それは'認識-std = C++しかし0xです。 – jweyrich

+0

@jweyrichしかし、結果は変わらないでしょう:( – user1214292

7

コンパイル:-std=c++11も機能することを

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

注意。私のマシンでは、実行されている:

$ clang --version 

結果で:

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