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++abi使用 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 回答