This looks like it may be a compiler difference in terms of the c++ standard's 
requirement for template function specializations.

I see

        template <> octave_value as( SEXP );

in rcpp_octave.h

This is meant to be a specialization of 
template <typename T> T as( SEXP );

But this is one of those peculiar -- but perfectly legal -- template functions 
where the template parameter appears only in the return value, ie cannot be 
deduced from the arguments. 

I believe the correct syntax for the specialization is 

        template <> octave_value as<octave_value>( SEXP );

Omitting the "<octave_value>" qualifier is a shorthand that is allowed (but not 
required) when the template parameter can be deduced from the function 
arguments, ie under the same conditions that one is allowed to call the 
function without specifying the template parameter and allow the compiler to 
"deduce" it.

Thus the corresponding specialization of the template wrap function:

        template <> SEXP wrap( const octave_value& );

*is* allowed, for the same reason that one can write:

octave_value ov;
SEXP sx = wrap(ov); // compiler turns this into wrap<octave_value>(ov)

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);

Since the compiler doesn't recognize the declaration of "as" in rcpp_octave.h 
as a specialization of the generic template, when it sees as<octave_value>(...) 
the only thing it can do is apply the generic definition in as.h, which it 
reports:

note: candidate is:"
  [43] "C:/R/R-3.0.2/library/Rcpp/include/Rcpp/as.h:144:29: note:
template<class T> T Rcpp::as(SEXP)" 

Regards,
Steve


-----Original Message-----
To: Renaud Gaujoux <ren...@mancala.cbio.uct.ac.za>
Cc: rcpp-devel@lists.r-forge.r-project.org
Subject: Re: [Rcpp-devel] Defining template specialisation for wrap on
        Windows 64bit (Compilation error: 'result_type' does not name a type)

...

Renaud Gaujoux wrote:

  [35] "In file included from
C:/R/R-3.0.2/library/Rcpp/include/Rcpp.h:50:0,"
  [36] "                 from rcpp_octave.h:25,"
  [37] "                 from rcpp_octave.cpp:21:"
  [38] "C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Language.h:156:21:
error: 'result_type' does not name a type"
...
  [41] "C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Language.h:162:41:
error: no matching function for call to 'as(SEXPREC*&)'"
  [42] "C:/R/R-3.0.2/library/Rcpp/include/Rcpp/Language.h:162:41:
note: candidate is:"
  [43] "C:/R/R-3.0.2/library/Rcpp/include/Rcpp/as.h:144:29: note:
template<class T> T Rcpp::as(SEXP)"
_______________________________________________
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

Reply via email to