I can't seem to figure out what Clang is saying or whether it's right as G++-4.7 seems to compile it fine.
The error comes from trying to initialize std::uniform_int_distribution
with curly braces for a non-static member.
The following fails (token_count
is a template parameter):
std::uniform_int_distribution<Int> random_dist{0, token_count-1};
with the error:
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,
I can, however, initialize it by doing this:
std::uniform_int_distribution<Int> random_dist = std::uniform_int_distribution<Int>(0, token_count - 1);
I am using the following command to compile it: clang++ -std=c++11 -stdlib=libc++ -lc++abi
with Clang-3.2.
Output of clang -v
:
clang version 3.2 (trunk 157320)
Target: x86_64-unknown-linux-gnu
Thread model: posix
You probably have a version of clang that does not yet implement generalized initializers. Tip-of-trunk clang compiles your code. You can check for this feature with:
Here's the list of features you can check for:
http://clang.llvm.org/docs/LanguageExtensions.html#cxx11