Hello,

In Rcpp we'd like to do something useful for types such as long long and unsigned long long.

For example, supporting our usual wrap construct. We'd like to be able to "wrap" a long long, or perhaps a std::vector<long long> so that it is returned to the R side in something meaningful (we are considering several options like loosing some precision and returning an int, loosing a bit less precision and returning a double or use bit shifting tricks and do something compatible with the bit64 package).

To do this, we try to be careful and hide the code behind these two PP tests:

#if defined(__GNUC__) &&  defined(__LONG_LONG_MAX__)

which tests for gcc compatible (includes clang) compiler and the availability of the long long type.


Now this is not enough and we also have to use __extension__ to disable warnings that are emitted by -pedantic. So we have something like this:

#if defined(__GNUC__) &&  defined(__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

and for the rest of what we do with these types, we use rcpp_long_long_type and rcpp_ulong_long_type and hide the code behind #if defined(RCPP_HAS_LONG_LONG_TYPES)


But apparently this is still not enough and on some versions of gcc (e.g. 4.7 something), -pedantic still generates the warnings unless we also use -Wno-long-long


Dirk tells me that the fact that these warnings show up means that it would not be accepted in CRAN. I understand that -pedantic is useful for finding potential portability problems, but in that case I believe everything is done to isolate the use of long long to a situation where we know we can use it given that we test for a compiler (gcc) and its known way to check for existence of long long: __LONG_LONG_MAX__

What are my options here ?

Romain

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to