Rcpp 1.1.0 on CRAN: C++11 now Minimum, Regular Semi-Annual Update

Wed, 02 Jul 2025 15:05:00 CDT

With a friendly Canadian hand wave from vacation in Beautiful British Columbia, and speaking on behalf of the Rcpp Core Team, I am excited to shared that the (regularly scheduled bi-annual) update to Rcpp just brought version 1.1.0 to CRAN. Debian builds haven been prepared and uploaded, Windows and macOS builds should appear at CRAN in the next few days, as will builds in different Linux distribution–and of course r2u should catch up tomorrow as well.

The key highlight of this release is the switch to C++11 as minimum standard. R itself did so in release 4.0.0 more than half a decade ago; if someone is really tied to an older version of R and an equally old compiler then using an older Rcpp with it has to be acceptable. Our own tests (using continuous integration at GitHub) still go back all the way to R 3.5.* and work fine (with a new-enough compiler). In the previous release post, we commented that we had only reverse dependency (falsely) come up in the tests by CRAN, this time there was none among the well over 3000 packages using Rcpp at CRAN. Which really is quite amazing, and possibly also a testament to our rigorous continued testing of our development and snapshot releases on the key branch.

This release continues with the six-months January-July cycle started with release 1.0.5 in July 2020. As just mentioned, we do of course make interim snapshot ‘dev’ or ‘rc’ releases available. While we not longer regularly update the Rcpp drat repo, the r-universe page and repo now really fill this role admirably (and with many more builds besides just source). We continue to strongly encourage their use and testing—I run my systems with these versions which tend to work just as well, and are of course also fully tested against all reverse-dependencies.

Rcpp has long established itself as the most popular way of enhancing R with C or C++ code. Right now, 3038 packages on CRAN depend on Rcpp for making analytical code go faster and further. On CRAN, 13.6% of all packages depend (directly) on Rcpp, and 61.3% of all compiled packages do. From the cloud mirror of CRAN (which is but a subset of all CRAN downloads), Rcpp has been downloaded 100.8 million times. The two published papers (also included in the package as preprint vignettes) have, respectively, 2023 (JSS, 2011) and 380 (TAS, 2018) citations, while the the book (Springer useR!, 2013) has another 695.

As mentioned, this release switches to C++11 as the minimum standard. The diffstat display in the CRANberries comparison to the previous release shows how several (generated) sources files with C++98 boilerplate have now been removed; we also flattened a number of if/else sections we no longer need to cater to older compilers (see below for details). We also managed more accommodation for the demands of tighter use of the C API of R by removing DATAPTR and CLOENV use. A number of other changes are detailed below.

The full list below details all changes, their respective PRs and, if applicable, issue tickets. Big thanks from all of us to all contributors!

Changes in Rcpp release version 1.1.0 (2025-07-01)

Changes in Rcpp API:

C++11 is now the required minimal C++ standard

The std::string_view type is now covered by wrap() (Lev Kandel in #1356 as discussed in #1357)

A last remaining DATAPTR use has been converted to DATAPTR_RO (Dirk in #1359)

Under R 4.5.0 or later, R_ClosureEnv is used instead of CLOENV (Dirk in #1361 fixing #1360)

Use of lsInternal switched to lsInternal3 (Dirk in #1362)

Removed compiler detection macro in a header cleanup setting C++11 as the minunum (Dirk in #1364 closing #1363)

Variadic templates are now used onconditionally given C++11 (Dirk in #1367 closing #1366)

Remove RCPP_USING_CXX11 as a #define as C++11 is now a given (Dirk in #1369)

Additional cleanup for __cplusplus checks (Iñaki in #1371 fixing #1370)

Unordered set construction no longer needs a macro for the pre-C++11 case (Iñaki in #1372)

Lambdas are supported in a Rcpp Sugar functions (Iñaki in #1373)

The Date(time)Vector classes now have default ctor (Dirk in #1385 closing #1384)

Fixed an issue where Rcpp::Language would duplicate its arguments (Kevin in #1388, fixing #1386)

Changes in Rcpp Attributes:

The C++26 standard now has plugin support (Dirk in #1381 closing #1380)

Changes in Rcpp Documentation:

Several typos were correct in the NEWS file (Ben Bolker in #1354)

The Rcpp Libraries vignette mentions PACKAGE_types.h to declare types used in RcppExports.cpp (Dirk in #1355)

The vignettes bibliography file was updated to current package versions, and now uses doi references (Dirk in #1389)

Changes in Rcpp Deployment:

Rcpp.package.skeleton() creates ‘URL’ and ‘BugReports’ if given a GitHub username (Dirk in #1358)

R 4.4.* has been added to the CI matrix (Dirk in #1376)

Tests involving NA propagation are skipped under linux-arm64 as they are under macos-arm (Dirk in #1379 closing #1378)

Thanks to my CRANberries, you can also look at a diff to the previous release Questions, comments etc should go to the rcpp-devel mailing list off the R-Forge page. Bugs reports are welcome at the GitHub issue tracker as well (where one can also search among open or closed issues).