[Rcpp-devel] Bizarre Rcpp::XPtr problem on GCC

Kevin Thornton krthornt at uci.edu
Thu May 21 00:22:38 CEST 2015


Hi,

I’m currently working on a header-only library that it intended to act as a “glue" layer between an existing C++11 library (also header only) and R, by means of Rcpp.

Basically, I am trying to provide some generic templates that perform operations using the existing C++11 library and return appropriate data objects to the R environment.

My current plan for this library is that:

1. It is also c++11
2. It exists in its own namespace

Rcpp seems to have problems with the latter, but only on GCC.  I am unable to return XPtr to objects whose names are typedefs within a namespace.  However, everything works using clang++.

A reproducible example of this issue can be found at https://gist.github.com/molpopgen/989ec678664d083bf4a3 <https://gist.github.com/molpopgen/989ec678664d083bf4a3>

Version numbers are:
Rcpp - 0.11.6
R - 3.1.0
g++ - 4.9.2
clang++ — 3.5 and 3.6
Ubuntu 14.04 LTS

I first discovered this when code I’d implemented on OS X/Yosemite/clang failed to link on my Linux box, where g++ is the default.

If you have git on your system and g++ as your default CXX, then

git clone https://gist.github.com/molpopgen/989ec678664d083bf4a3 <https://gist.github.com/molpopgen/989ec678664d083bf4a3>
cd 989ec678664d083bf4a3
##This fails on my system with GCC w/no deleter for the XPtr found, but it compiles fine if I set ~/.R/Makevars to say CXX=clang++-3.6
Rscript doit.R
##This works with any of the compilers on my Ubunutu system, because I provide a custom deleter for the XPtr
Rscript doit2.R

If you look at the comments in the C++ code in the gist, this issue arises due to a strange mix of typedefs in a namespace + a template function in the same namespace.  However, I don’t think that this is an unusual use case.  Looking at the XPtr implementation, I don’t see any reason for the symbol not to be generated.

Thanks,

Kevin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20150520/b8b704a5/attachment.html>


More information about the Rcpp-devel mailing list