13

本日、Apple は Xcode のコマンド ライン ツールを更新し、clang を 318.0.58 から 318.0.61 にアップグレードします。

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

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

それではコンパイルしてみました。

$ clang++ -stdlib=libc++ foo.cpp

エラーログ

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 バージョン:

$ 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
4

2 に答える 2

14

コマンドライン-std=c++0xの一部として(@jweyrichが正しく指摘したように)指定してみてください。clangのデフォルトclangは C++98 モードです。初期化リストは C++11 の機能です。

また、clang C++98 および C++11サポート ページから、さまざまな新しい C++ 標準機能のステータスを確認できます。たとえば、初期化リストは 3.1 (およびそれ以降) で使用できます。

于 2012-06-12T06:04:21.797 に答える
8

次のコマンドを使用してコンパイルします。

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

も機能することに注意してください-std=c++11。私のマシンでは、次を実行しています:

$ 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
于 2012-10-21T13:01:52.387 に答える