Probably just my incompetence at the time of writing it. 
Would be trivial enough to fix in Rcpp for anyone with the proper skills and 
willingness. I only have 1.05 of those 2. 

Romain

> Le 31 mars 2015 à 17:39, Kevin Thornton <krtho...@uci.edu> a écrit :
> 
> 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