【发布时间】:2013-02-06 15:03:44
【问题描述】:
以下代码
#include <random>
std::mt19937 generator((std::random_device())());
只用 clang 编译文件:
$ clang++ -c -std=c++0x test.cpp
但使用 gcc 失败:
$ g++ -c -std=c++0x test.cpp
test.cpp:3:47: erro: expected primary-expression before ‘)’ token
该代码在 C++11 中有效吗?它是 GCC 中的错误还是 Clang 的扩展/错误?
【问题讨论】:
-
Fwiw,这两个都吐了(在 Intellisense 中,错误:不允许强制转换为类型“random_device()”和“)”预期表达式)和仍然可以使用 VS2012 和Nov2012-CTP。
-
您可以使用新式构造函数语法强制构造函数调用(而不是奇怪的类型解释):
std::mt19937 generator { std::random_device{} () }; -
添加另一个括号也可以:
std::mt19937 generator(((std::random_device()))());