Thanks for the explanation, Romain. As a follow-up, is there a reason why value_type is defined in terms of a reference? In the mean time, I'll use remove_reference.
-Kevin > On Mar 31, 2015, at 1:04 AM, Romain François <rom...@r-enthusiasts.com> wrote: > > Hi, > > That’s because VTYPE::value_type is traits::r_vector_proxy<RTYPE>::type, i.e. > > template <int RTYPE> > struct r_vector_proxy{ > typedef typename storage_type<RTYPE>::type& type ; > } ; > > so VTYPE::value_type is int& > > You can either use stored_type, i.e. > > std::for_each( v.begin(), v.end(),[]( const VTYPE::stored_type& ) ... > > > Or do a little dance with the reference qualifier: > > std::for_each( v.begin(), v.end(),[]( const > std::remove_reference<VTYPE::value_type&>::type& __n ) ... > > Both of which are not very satisfying. > > > FWIW, in Rcpp11/Rcpp14, VTYPE::value_type is defined like this: > > typedef typename traits::storage_type<RTYPE>::type value_type ; > > so IntegerVector::value_type is int, and therefore you get what you > rightfully expect. > > > Romain > > >> Le 31 mars 2015 à 00:19, Kevin Thornton <krtho...@uci.edu> a écrit : >> >> Hi, >> >> I've come across an issue when compiling some code with Rcpp >= 0.11.4 >> (using R 3.1.3 with either gcc or clang on Linux, or clang on OS X). >> >> The code that reproduces the issue is here: >> https://gist.github.com/molpopgen/b3bda09590172044ff84 >> >> Specifically, the last function is where I'm running into trouble. I also >> tried the same ideas using C++98 (function objects instead of lambda >> expressions), and got the same results. >> >> The short version is that Rcpp::IntegerVector::value_type appears to lose >> some info about value_type's const-ness when a const IntegerVector is passed >> to an Rcpp function. I went back an tried older version of Rcpp and >> verified that the code from the above link compiles with version from 0.11.0 >> through 0.11.3. Starting with 0.11.4, the last function in that piece of >> code will no longer compile, and appears to think that a non-const int & is >> the type that it is looking for. >> >> I tried the other STL-like typedefs that one may expect ( reference, >> const_reference ), and they do not exist for Rcpp vector types. >> >> Any thoughts? Is this intended? Should I not write functions taking const >> references to Rcpp types? >> >> Best, >> >> Kevin >> >> ___________________________ >> Kevin Thornton >> Associate Professor >> Ecology and Evolutionary Biology >> University of California, Irvine >> http://www.molpopgen.org >> http://github.com/molpopgen >> http://github.com/ThorntonLab >> >> >> >> >> >> >> _______________________________________________ >> Rcpp-devel mailing list >> Rcpp-devel@lists.r-forge.r-project.org >> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel > ___________________________ Kevin Thornton Associate Professor Ecology and Evolutionary Biology University of California, Irvine http://www.molpopgen.org http://github.com/molpopgen http://github.com/ThorntonLab _______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel