On Mon, 2014-03-31 at 07:09 +0000, Martyn Plummer wrote: > Hi Martin, > > Thanks for the patch. I have applied it. I also added CXX1X and friends to > the list of approved variables for R CMD config. > So you can now query the existence of C++11 support with `R CMD config CXX1X` > (It is empty if C++11 support is not available) > and then take appropriate action in your configure script if, in Dirk's > words, you want to do the configure dance. > > The philosophy underlying C++ support in R is that there are only two > standards - C++98 and C++11 - and that > you should write to one of those standards.
A should add a clarification. The way I wrote this makes it sound like an even-handed choice, but only C++98 has cross-platform support. If you use C++11 then many users will not currently be able to use your code. > Nobody should be writing new code that uses TR1 extensions now: they are > superseded by the new standard. > > The map and unordered_map classes are a corner case, as they offer the same > functionality but latter has much better > complexity guarantees, so it is tempting to use it when available. But from > a global perspective you should think of > C++98 and C++11 as two different languages. > > Martyn > > > ________________________________________ > From: r-devel-boun...@r-project.org [r-devel-boun...@r-project.org] on behalf > of Romain Francois [rom...@r-enthusiasts.com] > Sent: 31 March 2014 08:22 > To: Martin Morgan > Cc: R-devel > Subject: Re: [Rd] CXX_STD and configure.ac in packages > > Hi, > > My advice would be to use SystemRequirements: C++11 > > As <unordered_map> is definitely a part of C++11, assuming this version of > the standard gives it to you. Your package may not compile on platforms where > a C++11 compiler is not available, but perhaps if this becomes a pattern, > then such compilers will start to be available, as in the current version of > OSX and recent enough versions of various linux distributions. > > The subset of feature that the version of gcc gives you with Rtools might be > enough. > > Alternatively, if you use Rcpp, you can use the RCPP_UNORDERED_MAP macro > which will expand to either unordered_map or tr1::unordered_map, all the > condition compiling is done in Rcpp. > > Romain > > Le 30 mars 2014 à 21:50, Martin Morgan <mtmor...@fhcrc.org> a écrit : > > > In C++ code for use in a R-3.1.0 package, my specific problem is that I > > would like to use <unordered_map> if it is available, or > > <tr1/unordered_map> if not, or <map> if all else fails. > > > > I (think I) can accomplish this with configure.ac as > > > > AC_INIT("DESCRIPTION") > > > > CXX=`"${R_HOME}/bin/R" CMD config CXX` > > CXXFLAGS=`"${R_HOME}/bin/R" CMD config CXXFLAGS` > > > > AC_CONFIG_HEADERS([src/config.h]) > > AC_LANG(C++) > > AC_CHECK_HEADERS([unordered_map tr1/unordered_map]) > > AC_OUTPUT > > > > Use of configure.ac does not seem to be entirely consistent with section > > 1.2.4 of Writing R Extensions, where one is advised that to use C++(11? see > > below) code one should > > > > CXX_STD = CXX11 > > > > in Makevars(.win). My code does not require a compiler that supports the > > full C++11 feature set. In addition, I do not understand the logic of > > setting a variable that influences compiler flags in Makevars -- > > configure.ac will see a compiler with inaccurate flags. > > > > Is use of configure.ac orthogonal to setting CXX_STD=CXX11? > > > > Some minor typos: > > > > /R-3-1-branch$ svn diff > > Index: doc/manual/R-exts.texi > > =================================================================== > > --- doc/manual/R-exts.texi (revision 65339) > > +++ doc/manual/R-exts.texi (working copy) > > @@ -2250,7 +2250,7 @@ > > @subsection Using C++11 code > > > > @R{} can be built without a C++ compiler although one is available > > -(but not necessarily installed) or all known @R{} platforms. > > +(but not necessarily installed) on all known @R{} platforms. > > For full portability across platforms, all > > that can be assumed is approximate support for the C++98 standard (the > > widely used @command{g++} deviates considerably from the standard). > > @@ -2272,7 +2272,7 @@ > > support a flag @option{-std=c++0x}, but the latter only provides partial > > support for the C++11 standard. > > > > -In order to use C++ code in a package, the package's @file{Makevars} > > +In order to use C++11 code in a package, the package's @file{Makevars} > > file (or @file{Makevars.win} on Windows) should include the line > > > > @example > > @@ -2329,7 +2329,7 @@ > > anything other than the GNU version of C++98 and GNU extensions (which > > include TR1). The default compiler on Windows is GCC 4.6.x and supports > > the @option{-std=c++0x} flag and some C++11 features (see > > -@uref{http://gcc.gnu.org/gcc-4.6/cxx0x_status.html}. On these > > +@uref{http://gcc.gnu.org/gcc-4.6/cxx0x_status.html}). On these > > platforms, it is necessary to select a different compiler for C++11, as > > described above, @emph{via} personal @file{Makevars} files. For > > example, on OS X 10.7 or later one could select @command{clang++}. > > > > -- > > Computational Biology / Fred Hutchinson Cancer Research Center > > 1100 Fairview Ave. N. > > PO Box 19024 Seattle, WA 98109 > > > > Location: Arnold Building M1 B861 > > Phone: (206) 667-2793 > > > > ______________________________________________ > > R-devel@r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > ----------------------------------------------------------------------- > This message and its attachments are strictly confidenti...{{dropped:8}} > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ----------------------------------------------------------------------- This message and its attachments are strictly confidenti...{{dropped:8}} ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel