Tests of C++20 as the default C++ standard ==========================================+ R last changed its default C++ standard to C++17 in R 4.3.0 ‘where available’, and it is intended to change this to C++20 ‘where available’ in R 4.6.0 around April 2026 (and hence slready in R-devel). Several CRAN packages already require C++20, including V8 which has hundreds of reverse dependencies. C++20 is now used for the standard fedora-gcc, fedora-clang and M1mac package check results, which supersede the logs formerly here. To test defaulting to C++20 for your own package(s) add something like CXX = g++ -std=gnu++20 to ~/.R/Makevars. (Copy the local version from R_HOME/etc/Makevars and change 17 to 20. For Windows, use ~/.R/Makevars.win.) Or use current R-devel. On a Linux box with clang and libc++ installed (see https://www.stats.ox.ac.uk/pub/bdr/Rconfig/r-devel-linux-x86_64-fedora-clang) and R built with GCC it should be possible to use something like CXX = clang++ -stdlib=libc++ -std=gnu++20 to reproduce the fedora-clang results.. It will continue to be possible to force C++17 for a package by specifying it (see ‘Writing R Extensions’). However, this would be unhelpful for packages which offer headers for LinkingTo as it may force the other packages to use C++17. See the details in https://cran.r-project.org/doc/manuals/r-devel/R-exts.html#Using-C_002b_002b-code GCC and GNU's libstdc++ are often slow to implement C++ deprecations and removals so not all the issues will be reproducible there. This includes std::not2, which was deprecated in C++17 and removed in C++20. std::result_of, which was deprecated in C++17 and removed in C++20. alignof() or arithmetic on pointers to incomplete types. Things like call to consteval function 'fmt::fstring' is not a constant expression OTOH, conflicts such as 'span' with Armadillo headers are only seen with libstdc++. Local definitions of 'span' could be renamed or accessed as ::span. If you do things like using namespace arma; using namespace std; replace these by using fully qualified names, at least for 'span'. Another header conflict has been seen with format: use ::format to circumvent this. And fmt::format has been superseded by std::format. For warning: implicit capture of 'this' via '[=]' is deprecated in C++20 C++20 requires this to be disambiguated to either [=, this] or [=, *this].