The thing about #elseif has been fixed on the development version a few days ago. Can you try again with the scn version of rcpp ?
Also, if you use c++11 features, you are on your own. We will happily do c++11 code when we get some sort of green light from cran, which might take years. Romain Le 19 nov. 2012 à 18:22, Thell Fowler <[email protected]> a écrit : > First:: Ubuntu clang version 3.0-6ubuntu3 (tags/RELEASE_30/final) (based on > LLVM 3.0) > > >> setting environment variables: > PKG_LIBS = -lmpfr -lgmp -L/home/thell/R/library/Rcpp/lib -lRcpp > -Wl,-rpath,/home/thell/R/library/Rcpp/lib > PKG_CPPFLAGS = -std=c++11 > > >> LinkingTo : Rcpp > CLINK_CPPFLAGS = -I"/home/thell/R/library/Rcpp/include" > > >> Program source : > > 1 : > 2 : // includes from the plugin > 3 : > 4 : #include <cmath> > 5 : #include <iterator> > 6 : #include <RcppCommon.h> > 7 : #include <mpreal.h> > 8 : > 9 : namespace Rcpp { > 10 : template <> SEXP wrap( const mpfr::mpreal& ) ; > 11 : } > 12 : > 13 : #include <Rcpp.h> > 14 : > 15 : // Definitions from Rmpfr conversion utilities. > 16 : #if GMP_NUMB_BITS == 32 > 17 : > 18 : # define R_mpfr_nr_ints nr_limbs > 19 : # define R_mpfr_exp_size 1 > 20 : > 21 : #elif GMP_NUMB_BITS == 64 > 22 : > 23 : # define R_mpfr_nr_ints (2*nr_limbs) > 24 : # define R_mpfr_exp_size 2 > 25 : > 26 : #endif > 27 : > 28 : # define RIGHT_HALF(_LONG_) ((long long)(_LONG_) & 0x00000000FFFFFFFF) > 29 : # define LEFT_SHIFT(_LONG_) (((long long)(_LONG_)) << 32) > 30 : > 31 : namespace Rcpp { > 32 : > 33 : template<> SEXP wrap( const mpfr::mpreal& v ) > 34 : { > 35 : mpfr_srcptr pv( v.mpfr_srcptr() ); > 36 : > 37 : S4 vS4("mpfr1"); > 38 : vS4.slot("prec") = wrap( (int)pv->_mpfr_prec ); > 39 : vS4.slot("sign") = wrap( (int)pv->_mpfr_sign); > 40 : > 41 : IntegerVector d( std::ceil( (double)pv->_mpfr_prec / > (double)mp_bits_per_limb ) ); > 42 : mp_size_t i = 0; > 43 : > 44 : if( GMP_NUMB_BITS == 32 ) { > 45 : > 46 : vS4.slot("exp") = wrap( (int)pv->_mpfr_exp ); > 47 : > 48 : for( auto & e : d ) { > 49 : e = (int) pv->_mpfr_d[i]; > 50 : ++i; > 51 : } > 52 : > 53 : } else { > 54 : > 55 : IntegerVector exp(2); > 56 : exp[0] = (int) RIGHT_HALF(pv->_mpfr_exp); > 57 : exp[1] = (int) (pv->_mpfr_exp >> 32); > 58 : vS4.slot("exp") = exp; > 59 : > 60 : for(i=0; i < d.size(); i++) { > 61 : d[2*i] = (int) RIGHT_HALF(pv->_mpfr_d[i]); > 62 : d[2*i+1]= (int) (pv->_mpfr_d[i] >> 32); > 63 : } > 64 : > 65 : } > 66 : > 67 : vS4.slot("d") = d; > 68 : return vS4; > 69 : } > 70 : > 71 : } > 72 : > 73 : > 74 : #ifndef BEGIN_RCPP > 75 : #define BEGIN_RCPP > 76 : #endif > 77 : > 78 : #ifndef END_RCPP > 79 : #define END_RCPP > 80 : #endif > 81 : > 82 : using namespace Rcpp; > 83 : > 84 : > 85 : // user includes > 86 : > 87 : > 88 : > 89 : // declarations > 90 : extern "C" { > 91 : SEXP file34e23fb9ce5( SEXP x, SEXP prec) ; > 92 : } > 93 : > 94 : // definition > 95 : > 96 : SEXP file34e23fb9ce5( SEXP x, SEXP prec ){ > 97 : BEGIN_RCPP > 98 : > 99 : using namespace mpfr; > 100 : using namespace Rcpp; > 101 : > 102 : mpreal::set_default_prec( as< unsigned long >( prec ) ); > 103 : return wrap( fac_ui( as< double >( x ) ) ); > 104 : > 105 : END_RCPP > 106 : } > 107 : > 108 : > Compilation argument: > /usr/lib/R/bin/R CMD SHLIB file34e23fb9ce5.cpp 2> > file34e23fb9ce5.cpp.err.txt > "/usr/bin/clang++" -I/usr/share/R/include -DNDEBUG -std=c++11 > -I"/home/thell/R/library/Rcpp/include" -fpic -O3 -pipe -g -c > file34e23fb9ce5.cpp -o file34e23fb9ce5.o > In file included from file34e23fb9ce5.cpp:13: > In file included from /home/thell/R/library/Rcpp/include/Rcpp.h:68: > In file included from > /home/thell/R/library/Rcpp/include/Rcpp/sugar/sugar.h:25: > /home/thell/R/library/Rcpp/include/Rcpp/sugar/sets.h:28:2: error: invalid > preprocessing directive > #elseif defined(HAS_TR1_UNORDERED_SET) > ^ > /home/thell/R/library/Rcpp/include/Rcpp/sugar/sets.h:29:13: warning: > 'RCPP_UNIQUE_SET' macro redefined > #define RCPP_UNIQUE_SET std::tr1::unordered_set > ^ > /home/thell/R/library/Rcpp/include/Rcpp/sugar/sets.h:26:13: note: previous > definition is here > #define RCPP_UNIQUE_SET std::unordered_set > ^ > /home/thell/R/library/Rcpp/include/Rcpp/sugar/sets.h:30:13: warning: > 'RCPP_UNIQUE_MAP' macro redefined > #define RCPP_UNIQUE_MAP std::tr1::unordered_map > ^ > /home/thell/R/library/Rcpp/include/Rcpp/sugar/sets.h:27:13: note: previous > definition is here > #define RCPP_UNIQUE_MAP std::unordered_map > ^ > file34e23fb9ce5.cpp:57:31: warning: shift count >= width of type > [-Wshift-count-overflow] > exp[1] = (int) (pv->_mpfr_exp >> 32); > ^ ~~ > file34e23fb9ce5.cpp:62:33: warning: shift count >= width of type > [-Wshift-count-overflow] > d[2*i+1]= (int) (pv->_mpfr_d[i] >> 32); > ^ ~~ > 4 warnings and 1 error generated. > make: *** [file34e23fb9ce5.o] Error 1 > > ERROR(s) during compilation: source code errors or compiler configuration > errors! > > ================================ > Now:: clang version 3.3 (http://llvm.org/git/clang.git > 86256af6c8515077278d0a78f183fb6d322518ac) (http://llvm.org/git/llvm.git > 8f54a53f0ed2091e05d5ca87d239487da292cbbc) > > >> setting environment variables: > PKG_LIBS = -lmpfr -lgmp -L/home/thell/R/library/Rcpp/lib -lRcpp > -Wl,-rpath,/home/thell/R/library/Rcpp/lib > PKG_CPPFLAGS = -std=c++11 > > >> LinkingTo : Rcpp > CLINK_CPPFLAGS = -I"/home/thell/R/library/Rcpp/include" > > >> Program source : > > 1 : > 2 : // includes from the plugin > 3 : > 4 : #include <cmath> > 5 : #include <iterator> > 6 : #include <RcppCommon.h> > 7 : #include <mpreal.h> > 8 : > 9 : namespace Rcpp { > 10 : template <> SEXP wrap( const mpfr::mpreal& ) ; > 11 : } > 12 : > 13 : #include <Rcpp.h> > 14 : > 15 : // Definitions from Rmpfr conversion utilities. > 16 : #if GMP_NUMB_BITS == 32 > 17 : > 18 : # define R_mpfr_nr_ints nr_limbs > 19 : # define R_mpfr_exp_size 1 > 20 : > 21 : #elif GMP_NUMB_BITS == 64 > 22 : > 23 : # define R_mpfr_nr_ints (2*nr_limbs) > 24 : # define R_mpfr_exp_size 2 > 25 : > 26 : #endif > 27 : > 28 : # define RIGHT_HALF(_LONG_) ((long long)(_LONG_) & 0x00000000FFFFFFFF) > 29 : # define LEFT_SHIFT(_LONG_) (((long long)(_LONG_)) << 32) > 30 : > 31 : namespace Rcpp { > 32 : > 33 : template<> SEXP wrap( const mpfr::mpreal& v ) > 34 : { > 35 : mpfr_srcptr pv( v.mpfr_srcptr() ); > 36 : > 37 : S4 vS4("mpfr1"); > 38 : vS4.slot("prec") = wrap( (int)pv->_mpfr_prec ); > 39 : vS4.slot("sign") = wrap( (int)pv->_mpfr_sign); > 40 : > 41 : IntegerVector d( std::ceil( (double)pv->_mpfr_prec / > (double)mp_bits_per_limb ) ); > 42 : mp_size_t i = 0; > 43 : > 44 : if( GMP_NUMB_BITS == 32 ) { > 45 : > 46 : vS4.slot("exp") = wrap( (int)pv->_mpfr_exp ); > 47 : > 48 : for( auto & e : d ) { > 49 : e = (int) pv->_mpfr_d[i]; > 50 : ++i; > 51 : } > 52 : > 53 : } else { > 54 : > 55 : IntegerVector exp(2); > 56 : exp[0] = (int) RIGHT_HALF(pv->_mpfr_exp); > 57 : exp[1] = (int) (pv->_mpfr_exp >> 32); > 58 : vS4.slot("exp") = exp; > 59 : > 60 : for(i=0; i < d.size(); i++) { > 61 : d[2*i] = (int) RIGHT_HALF(pv->_mpfr_d[i]); > 62 : d[2*i+1]= (int) (pv->_mpfr_d[i] >> 32); > 63 : } > 64 : > 65 : } > 66 : > 67 : vS4.slot("d") = d; > 68 : return vS4; > 69 : } > 70 : > 71 : } > 72 : > 73 : > 74 : #ifndef BEGIN_RCPP > 75 : #define BEGIN_RCPP > 76 : #endif > 77 : > 78 : #ifndef END_RCPP > 79 : #define END_RCPP > 80 : #endif > 81 : > 82 : using namespace Rcpp; > 83 : > 84 : > 85 : // user includes > 86 : > 87 : > 88 : > 89 : // declarations > 90 : extern "C" { > 91 : SEXP file34e215a2f7e7( SEXP x, SEXP prec) ; > 92 : } > 93 : > 94 : // definition > 95 : > 96 : SEXP file34e215a2f7e7( SEXP x, SEXP prec ){ > 97 : BEGIN_RCPP > 98 : > 99 : using namespace mpfr; > 100 : using namespace Rcpp; > 101 : > 102 : mpreal::set_default_prec( as< unsigned long >( prec ) ); > 103 : return wrap( fac_ui( as< double >( x ) ) ); > 104 : > 105 : END_RCPP > 106 : } > 107 : > 108 : > Compilation argument: > /usr/lib/R/bin/R CMD SHLIB file34e215a2f7e7.cpp 2> > file34e215a2f7e7.cpp.err.txt > "clang++" -I/usr/share/R/include -DNDEBUG -std=c++11 > -I"/home/thell/R/library/Rcpp/include" -fpic -O3 -pipe -g -c > file34e215a2f7e7.cpp -o file34e215a2f7e7.o > In file included from file34e215a2f7e7.cpp:6: > In file included from /home/thell/R/library/Rcpp/include/RcppCommon.h:349: > In file included from > /home/thell/R/library/Rcpp/include/Rcpp/sugar/sugar_forward.h:29: > In file included from > /home/thell/R/library/Rcpp/include/Rcpp/sugar/logical/logical.h:27: > /home/thell/R/library/Rcpp/include/Rcpp/sugar/logical/SingleLogicalResult.h:36:2: > error: circular inheritance between 'conversion_to_bool_is_forbidden<x>' and > 'conversion_to_bool_is_forbidden<x>' > conversion_to_bool_is_forbidden<x>{ > ^ > In file included from file34e215a2f7e7.cpp:13: > In file included from /home/thell/R/library/Rcpp/include/Rcpp.h:68: > In file included from > /home/thell/R/library/Rcpp/include/Rcpp/sugar/sugar.h:25: > /home/thell/R/library/Rcpp/include/Rcpp/sugar/sets.h:28:2: error: invalid > preprocessing directive > #elseif defined(HAS_TR1_UNORDERED_SET) > ^ > /home/thell/R/library/Rcpp/include/Rcpp/sugar/sets.h:29:13: warning: > 'RCPP_UNIQUE_SET' macro redefined > #define RCPP_UNIQUE_SET std::tr1::unordered_set > ^ > /home/thell/R/library/Rcpp/include/Rcpp/sugar/sets.h:26:13: note: previous > definition is here > #define RCPP_UNIQUE_SET std::unordered_set > ^ > /home/thell/R/library/Rcpp/include/Rcpp/sugar/sets.h:30:13: warning: > 'RCPP_UNIQUE_MAP' macro redefined > #define RCPP_UNIQUE_MAP std::tr1::unordered_map > ^ > /home/thell/R/library/Rcpp/include/Rcpp/sugar/sets.h:27:13: note: previous > definition is here > #define RCPP_UNIQUE_MAP std::unordered_map > ^ > file34e215a2f7e7.cpp:57:31: warning: shift count >= width of type > [-Wshift-count-overflow] > exp[1] = (int) (pv->_mpfr_exp >> 32); > ^ ~~ > file34e215a2f7e7.cpp:62:33: warning: shift count >= width of type > [-Wshift-count-overflow] > d[2*i+1]= (int) (pv->_mpfr_d[i] >> 32); > ^ ~~ > 4 warnings and 2 errors generated. > make: *** [file34e215a2f7e7.o] Error 1 > > ERROR(s) during compilation: source code errors or compiler configuration > errors! > > > The code compiles and works (the warnings are expected for now) using g++. > -- > Sincerely, > Thell > _______________________________________________ > Rcpp-devel mailing list > [email protected] > https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
_______________________________________________ Rcpp-devel mailing list [email protected] https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
