自更新到 R 3.4.0 以来,C++11 的 Rcpp 插件无法正常工作

Rcpp plugin for C++11 not working since update to R 3.4.0

自从我将R更新到新版本3.4.0后,启用C++11的Rcpp插件似乎无法正常工作。 (请注意,这与此处报告的情况不同 http://r.789695.n4.nabble.com/R-3-4-has-broken-C-11-support-td4732692.html

我有需要 C++11 标准的 C++ 文件,我使用命令 Rcpp::sourceCpp(foo.cpp) 通过 Rcpp 在 R 中编译这些文件。 R 默认标准是 C++98,但我可以通过在我的 C++ 文件中添加以下命令来更改它
// [[Rcpp::plugins("cpp11")]]

这不再适用于新版本的 R 3.4.0,我的编译器使用默认标准 (C++98) 而不是 C++11,尽管有插件。它曾经与以前版本的 R 一起工作。

我目前的解决方案是为我的 R 会话设置一个环境变量: Sys.setenv("PKG_CXXFLAGS"="-std=c++11")

这是我在 R 中使用的配置:

sessionInfo()<br>
R version 3.4.0 (2017-04-21)
Platform: x86_64-suse-linux-gnu (64-bit)
Running under: openSUSE Leap 42.2<br>
Matrix products: default
BLAS: /usr/lib64/R/lib/libRblas.so
LAPACK: /usr/lib64/R/lib/libRlapack.so
locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8<br>
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C<br>
 [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C<br>
attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base<br>
loaded via a namespace (and not attached):
[1] compiler_3.4.0  rsconnect_0.4.3 tools_3.4.0 
</pre>

我使用 Rcpp 包版本 0.12.1.0。 我的编译器如下:

~$ g++ --version | head -n1
g++ (SUSE Linux) 4.8.5 </pre>

我错过了什么吗?有没有其他人遇到同样的问题?

这是昨天在 GitHub issue tracker in #683 and already closed in pull request #684 上报道的,现在已被合并。

所以只需升级到 master 分支,或者暂时手动设置 env.var。这是一个上游 R 更改打破了这一点,没有提供向后兼容性。

根据答案——只需插入

# R code
Sys.setenv("USE_CXX11" = "yes")
sourceCpp("code.cpp")

# C++ code
// [[Rcpp::plugins(cpp11)]]
// [[Rcpp::export]]                                                                       
double myhypot(double x, double y) {
return std::hypot(x,y);

}

...而且它确实有效!