Thanks a lot.  Could you please elaborate a little more as I did not get some of <div>what you mentioned below?</div><div><br></div><div>Thanks,</div><div>Jiqiang <br><br><div class="gmail_quote">On Tue, Jul 10, 2012 at 9:30 PM, Dirk Eddelbuettel <span dir="ltr"><<a href="mailto:edd@debian.org" target="_blank">edd@debian.org</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><br>
On 10 July 2012 at 21:01, Jiqiang Guo wrote:<br>
| Dear List:<br>
|<br>
| I case across an error on Windows 7 64bits,  any idea how can I avoid that? <br>
| I wish I could provide a demonstrative example, but it's too complicated now. <br>
|<br>
| This is the error report:<br>
<br>
</div>It really helps when you show __code__ producing the error in question.<br></blockquote><div>Sure. Sorry for that. As I said, I really wish to.  </div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<br>
Here I can only surmise that you used 'long long' which is not permitted on<br>
CRAN as its mandated compilers versions do not (yet) support C++11. Which is<br>
why Rcpp (as shipped from CRAN) cannot support it.<br></blockquote><div><br></div><div>What do you mean by using long long?  I do think I can use long long (or size_t) in  </div><div>my code.  For example, the following works for me: [I do realize that on windows, </div>

<div>I cannot use Rcpp::wrap(a) where a's type is size_t or Rcpp::as<size_t>(c), so I got rid of</div><div>those wrap/as between size_t and SEXP.]  Do you think I still have a place where </div><div>I used wrap/as for long long type (or size_t)? </div>
<div><br></div><div><div><font face="courier new, monospace">library(Rcpp)</font></div>
<div><font face="courier new, monospace">library(inline)</font></div><div><font face="courier new, monospace"><br>
</font></div><div><font face="courier new, monospace">src <- '</font></div><div><font face="courier new, monospace">  // size_t b = 100;</font></div><div><font face="courier new, monospace">  unsigned int b = 100;</font></div>

<div><font face="courier new, monospace">  Rcpp::List lst(a); </font></div><div><font face="courier new, monospace">  size_t a = Rcpp::as<unsigned int>(lst["a"]); </font></div><div><font face="courier new, monospace">  lst["b"] = b; </font></div>

<div><font face="courier new, monospace">  size_t c = 1000;</font></div><div><font face="courier new, monospace">  long long ll = 100;</font></div><div><font face="courier new, monospace">  #ifdef RCPP_HAS_LONG_LONG_TYPES</font></div>

<div><font face="courier new, monospace">    Rcpp::Rcout << "in ifdef" << std::endl;</font></div><div><font face="courier new, monospace">  #endif </font></div><div><font face="courier new, monospace">  Rcpp::NumericVector nv(c); </font></div>

<div><font face="courier new, monospace">  return lst;</font></div><div><font face="courier new, monospace">'</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace"><br>

</font></div><div><font face="courier new, monospace">fx <- cxxfunction(signature(a = 'list'), body = src, includes = '', </font></div><div><font face="courier new, monospace">                  plugin = 'Rcpp', verbose = TRUE)</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">ll <- list(a=1, b=2, c=3); </font></div><div><font face="courier new, monospace">fx(ll); </font></div></div><div><br></div>

<div><br></div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
It works if you use the<br>
<br>
   -std=c++11<br>
<br>
flag as an option to PKG_CXXFLAGS for both Rcpp and Rstan --- but then you<br>
won't be able to upload this.<br>
<br>
Rcpp does this in RcppCommon.h:  if g++ is used, and -std=c++11 has been<br>
activated, and if we see LONG_LONG_MAX (coming from the system headers)<br>
__then__ do we define RCPP_HAD_LONG_LONG_TYPES :<br>
package:<br>
<br>
#ifdef __GNUC__<br>
#ifdef __GXX_EXPERIMENTAL_CXX0X__<br>
#ifdef LONG_LONG_MAX<br>
    __extension__ typedef long long int rcpp_long_long_type;<br>
    __extension__ typedef unsigned long long int rcpp_ulong_long_type;<br>
    #define RCPP_HAS_LONG_LONG_TYPES<br>
#endif<br>
#endif<br>
#endif<br>
<br>
You can protect your code with RCPP_HAD_LONG_LONG_TYPES tests in an #ifdef, a<br>
few of our packages do that as eg my most recent upload<br>
<br>
#ifdef RCPP_HAS_LONG_LONG_TYPES<br>
        } else if (type == "integer") {<br>
            int64_t *p = reinterpret_cast<int64_t*>(arr.data);<br>
            ret = Rcpp::IntegerVector(p, p + shape[0]);<br>
#endif<br>
<br>
as int64_t does in fact become "long long int" on 32 bit systems...<br>
<span><font color="#888888"><br>
Dirk<br>
<br>
--<br>
Dirk Eddelbuettel | <a href="mailto:edd@debian.org" target="_blank">edd@debian.org</a> | <a href="http://dirk.eddelbuettel.com" target="_blank">http://dirk.eddelbuettel.com</a><br>
</font></span></blockquote></div><br></div>