Thanks for popping in Steve. I was full of hope when I read your reply! Unfortunately I could not solve the issue with the changes you suggested.
> I believe the correct syntax for the specialization is > > template <> octave_value as<octave_value>( SEXP ); > This declaration works as fine on Linux as the one omitting "<octave_value>". No luck on Windows though (but see below) > but one cannot write: > SEXP sx; > octave_value ov = as(sx); // type deduction applies only to arguments, not return value! > > // correct: > // ov = as<octave_value>(sx); yes, this makes completely sense, and this is how I indeed call the template function. I reduced the code even more and actually get the same errors even without declaring any template specialisation, but just including <Rcpp.h>! See code below. I don't see why only including the headers in sequence breaks compilation, since we are not even defining . The first reported error occurs in include/Rcpp/Language.h, in the following class, where 'result_type' is defined by typdef: template <typename OUT=SEXP> class fixed_call { public: *typedef OUT result_type ;* fixed_call( Language call_ ) : call(call_){} fixed_call( Function fun ) : call(fun){} OUT operator()(){ return as<OUT>( call.eval() ) ; } private: Language call ; } ; This got me thinking and googling for this more general error (see next email). Yeah!! Renaud ############## // Single file rcpp_octave.cpp // RcppCommon #include <RcppCommon.h> // Octave libraries #include <octave/config.h> #include <octave/ov.h> // Rcpp #include <Rcpp.h> void dummy(){ } ### Compilation log (I managed to force gcc to stop after 10 errors: I learnt something today): ** libs Warning: this package has a non-empty 'configure.win' file, so building only the main architecture g++ -m32 -I"c:/R/R-3.0.2/include" -DNDEBUG -IC:/R/R-3.0.2/library/Rcpp/include -fmax-errors=10 -Wall -DOCT_POST_3_4_0=1 -I"C:\Octave\Octave3.6.4_gcc4.6.2\include" -I"C:\Octave\Octave3.6.4_gcc4.6.2\include\octave-3.6.4\octave" -I"C:\Octave\Octave3.6.4_gcc4.6.2\include\octave-3.6.4\octave/../" -I"c:/R/R-3.0.2/library/Rcpp/include" -I"d:/RCompile/CRANpkg/extralibs64/local/include" -O2 -Wall -mtune=core2 -c rcpp_octave.cpp -o rcpp_octave.o In file included from rcpp_octave.cpp:24:0: C:\Octave\Octave3.6.4_gcc4.6.2\include\octave-3.6.4\octave/../octave/config.h:2764:0: warning: "_WIN32_WINNT" redefined [enabled by default] c:\rtools\gcc-4.6.3\bin\../lib/gcc/i686-w64-mingw32/4.6.3/../../../../i686-w64-mingw32/include/_mingw.h:244:0: note: this is the location of the previous definition In file included from C:/R/R-3.0.2/library/Rcpp/include/Rcpp.h:50:0, from rcpp_octave.cpp:27: C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Language.h:156:21: error: 'result_type' does not name a type C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Language.h:161:24: error: ISO C++ forbids declaration of 'operator()' with no type [-fpermissive] C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Language.h: In member function 'int Rcpp::fixed_call< <template-parameter-1-1> >::operator()()': C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Language.h:162:41: error: no matching function for call to 'as(SEXPREC*&)' C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Language.h:162:41: note: candidate is: C:/R/R-3.0.2/library/Rcpp/include/Rcpp/as.h:144:29: note: template<class T> T Rcpp::as(SEXP) C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Language.h: At global scope: C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Language.h:170:56: error: template argument 2 is invalid C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Language.h:176:41: error: ISO C++ forbids declaration of 'operator()' with no type [-fpermissive] C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Language.h: In member function 'int Rcpp::unary_call<T, <template-parameter-1-2> >::operator()(const T&)': C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Language.h:178:41: error: no matching function for call to 'as(SEXPREC*&)' C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Language.h:178:41: note: candidate is: C:/R/R-3.0.2/library/Rcpp/include/Rcpp/as.h:144:29: note: template<class T> T Rcpp::as(SEXP) C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Language.h: At global scope: C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Language.h:187:62: error: template argument 3 is invalid C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Language.h:193:52: error: ISO C++ forbids declaration of 'operator()' with no type [-fpermissive] C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Language.h: In member function 'int Rcpp::binary_call<T1, T2, <template-parameter-1-3> >::operator()( const T1&, const T2&)': C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Language.h:196:41: error: no matching function for call to 'as(SEXPREC*&)' C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Language.h:196:41: note: candidate is: C:/R/R-3.0.2/library/Rcpp/include/Rcpp/as.h:144:29: note: template<class T> T Rcpp::as(SEXP) In file included from C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Module.h:85:0, from C:/R/R-3.0.2/library/Rcpp/include/Rcpp.h:63, from rcpp_octave.cpp:27: C:/R/R-3.0.2/library/Rcpp/include/Rcpp/module/Module_generated_get_return_type.h: In function 'std::string Rcpp::get_return_type_dispatch(Rc pp::traits::false_type)': C:/R/R-3.0.2/library/Rcpp/include/Rcpp/module/Module_generated_get_return_type.h:29:32: error: expected primary-expression before ')' token compilation terminated due to -fmax-errors=10. make: *** [rcpp_octave.o] Error 1 ERROR: compilation failed for package 'RcppOctave' * removing 'Z:/projects/RcppOctave/libwin/RcppOctave' * restoring previous 'Z:/projects/RcppOctave/libwin/RcppOctave'
_______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel