std::mt19937 在 Rcpp 中

std::mt19937 in Rcpp

这个问题是通过 win-builder-r 在 windows 上测试我的 R (RcppParallel) 包引起的,至于我的 mac 没有问题。

"error: 'mt19937' is not a member of 'std'"

此外,首先出现此错误:

D:/Compiler/gcc-4.9.3/mingw_32/i686-w64-mingw32/include/c++/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.

可以从前面的post中找到一个最小的例子,使用最后一个:

一般的 <random>header 和特别的 std::mt19337 仅适用于 C++11 及更高版本。如果你想在 R 包的上下文中在 Windows 上使用 C++11,你应该添加

CXX_STD = CXX11

src/Makevars.win(来源:Writing R Extensions)。在其他平台上,通常没有这个,因为使用默认使用 C++11 的更新编译器。但是,请注意 WRE 不鼓励使用 C++11 中的 random,可能是因为分布函数是实现定义的。