4.1.0: pointer to member type deduction in template parameter

Daniel Llorens del Río daniel.llorensdelrio@epfl.ch
Thu Mar 2 11:44:00 GMT 2006


I have this code which compiles cleanly under 4.0.1.

#include <cassert>

struct A
     int f() const { return 1; }

A a;

template <class R, class S>
inline R wrap(R (S::*f)())
     return (a.*f)();

int main()
lineX:    assert(wrap(&A::f) == 1);
           return 0;

Under 4.1.0, I get the error

program.C: In function 'int main()':
program.C:linex: error: no matching function for call to 'wrap(int  

and I must modify the declaration of warp() to

inline R wrap(R (S::*f)() const)

to make it compile.

Is 4.1 right? I would have tought that 'R (S::*)() const' is included  
in 'R (S::*f)()'.

Thanks in advance,


More information about the Gcc-help mailing list