Thanks a lot. Could you please elaborate a little more as I did not get some of what you mentioned below?
Thanks, Jiqiang On Tue, Jul 10, 2012 at 9:30 PM, Dirk Eddelbuettel <[email protected]> wrote: > > On 10 July 2012 at 21:01, Jiqiang Guo wrote: > | Dear List: > | > | I case across an error on Windows 7 64bits, any idea how can I avoid > that? > | I wish I could provide a demonstrative example, but it's too complicated > now. > | > | This is the error report: > > It really helps when you show __code__ producing the error in question. > Sure. Sorry for that. As I said, I really wish to. > Here I can only surmise that you used 'long long' which is not permitted on > CRAN as its mandated compilers versions do not (yet) support C++11. Which > is > why Rcpp (as shipped from CRAN) cannot support it. > What do you mean by using long long? I do think I can use long long (or size_t) in my code. For example, the following works for me: [I do realize that on windows, I cannot use Rcpp::wrap(a) where a's type is size_t or Rcpp::as<size_t>(c), so I got rid of those wrap/as between size_t and SEXP.] Do you think I still have a place where I used wrap/as for long long type (or size_t)? library(Rcpp) library(inline) src <- ' // size_t b = 100; unsigned int b = 100; Rcpp::List lst(a); size_t a = Rcpp::as<unsigned int>(lst["a"]); lst["b"] = b; size_t c = 1000; long long ll = 100; #ifdef RCPP_HAS_LONG_LONG_TYPES Rcpp::Rcout << "in ifdef" << std::endl; #endif Rcpp::NumericVector nv(c); return lst; ' fx <- cxxfunction(signature(a = 'list'), body = src, includes = '', plugin = 'Rcpp', verbose = TRUE) ll <- list(a=1, b=2, c=3); fx(ll); > It works if you use the > > -std=c++11 > > flag as an option to PKG_CXXFLAGS for both Rcpp and Rstan --- but then you > won't be able to upload this. > > Rcpp does this in RcppCommon.h: if g++ is used, and -std=c++11 has been > activated, and if we see LONG_LONG_MAX (coming from the system headers) > __then__ do we define RCPP_HAD_LONG_LONG_TYPES : > package: > > #ifdef __GNUC__ > #ifdef __GXX_EXPERIMENTAL_CXX0X__ > #ifdef LONG_LONG_MAX > __extension__ typedef long long int rcpp_long_long_type; > __extension__ typedef unsigned long long int rcpp_ulong_long_type; > #define RCPP_HAS_LONG_LONG_TYPES > #endif > #endif > #endif > > You can protect your code with RCPP_HAD_LONG_LONG_TYPES tests in an > #ifdef, a > few of our packages do that as eg my most recent upload > > #ifdef RCPP_HAS_LONG_LONG_TYPES > } else if (type == "integer") { > int64_t *p = reinterpret_cast<int64_t*>(arr.data); > ret = Rcpp::IntegerVector(p, p + shape[0]); > #endif > > as int64_t does in fact become "long long int" on 32 bit systems... > > Dirk > > -- > Dirk Eddelbuettel | [email protected] | http://dirk.eddelbuettel.com >
_______________________________________________ Rcpp-devel mailing list [email protected] https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
