[Rcpp-devel] strange bool conversion?

Romain Francois romain at r-enthusiasts.com
Mon Dec 13 18:38:30 CET 2010


This is fixed now (rev 2789).

For the curious, it seems that the generic_proxy template made the wrong 
choice between these conversion operators:

operator SEXP() const {
     return get() ;
}
			
template <typename U> operator U() const {
     return ::Rcpp::as<U>(get()) ;
}
			
I resolved this by forcing the conversion to bool with this:

operator bool() const {
     return ::Rcpp::as<bool>(get()) ;
}
	
Thanks again for the report.
		
Romain

Le 13/12/10 17:30, Daniel Sabanés Bové a écrit :
> Hi,
>
> I have just discovered an extremely strange behaviour in conversion of
> an R logical to a C++ bool. Consider the minimal example:
>
> --- snip ---
>
> library(Rcpp)
> library(inline)
>
> ## this compiles and loads fine, but is wrong:
> wrong<- cxxfunction(signature(x="list") , '
>          List input(x);
>          const bool a = input[0];
>          return wrap(a);
>          ' , plugin = "Rcpp")
>
> wrong(list(TRUE))
> wrong(list(FALSE))
>
> ## this is correct:
> correct<- cxxfunction(signature(x="list") , '
>          List input(x);
>          const bool a = as<bool>(input[0]);
>          return wrap(a);
>          ' , plugin = "Rcpp")
>
> correct(list(TRUE))
> correct(list(FALSE))
>
> --- snap ----
>
> In Rcpp 0.8.9 wrong(list(FALSE)) == TRUE, which is quite surprising to
> the user...
> Sorry if this already a known feature, but then I would be curious if
> this behaviour is really wished?
>
> Thanks in advance,
> best regards
>
> Daniel

-- 
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
|- http://bit.ly/fT2rZM : highlight 0.2-5
|- http://bit.ly/gpCSpH : Evolution of Rcpp code size
`- http://bit.ly/hovakS : RcppGSL initial release




More information about the Rcpp-devel mailing list