2

Clang が何を言っているのか、または G++-4.7 が正常にコンパイルしているように見えるので、それが正しいかどうかを理解できないようです。

このエラーはstd::uniform_int_distribution、非静的メンバーの中括弧で初期化しようとしたことが原因です。

以下は失敗します (token_countはテンプレート パラメーターです)。 std::uniform_int_distribution<Int> random_dist{0, token_count-1};

エラーで:

error: chosen constructor is explicit in copy-initialization
  std::uniform_int_distribution<Int> random_dist{0, b-1};
                                                ^~~~~~~~

/usr/include/c++/v1/algorithm:2644:14: note: constructor declared here
    explicit uniform_int_distribution(result_type __a = 0,

ただし、次のようにして初期化できます。

std::uniform_int_distribution<Int> random_dist = std::uniform_int_distribution<Int>(0, token_count - 1);

次のコマンドを使用してコンパイルしています: clang++ -std=c++11 -stdlib=libc++ -lc++abiwith Clang-3.2.

の出力clang -v:

clang version 3.2 (trunk 157320)
Target: x86_64-unknown-linux-gnu
Thread model: posix
4

1 に答える 1

1

一般化された初期化子をまだ実装していないバージョンの clang を使用している可能性があります。Tip-of-trunk clang はコードをコンパイルします。この機能は次の方法で確認できます。

#if __has_feature(cxx_generalized_initializers) 

チェックできる機能のリストは次のとおりです。

http://clang.llvm.org/docs/LanguageExtensions.html#cxx11

于 2012-05-26T21:36:38.230 に答える