[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