Clang ++非静态数据成员初始化错误? C ++ 11

时间:2012-05-26 21:02:13

标签: c++ c++11 clang libc++ member-initialization

我似乎无法弄清楚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

1 个答案:

答案 0 :(得分:1)

您可能有一个尚未实现通用初始值设定项的clang版本。 Tip-of-trunk clang编译你的代码。您可以通过以下方式检查此功能:

#if __has_feature(cxx_generalized_initializers) 

以下是您可以查看的功能列表:

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