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

Reply via email to