This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: c++/950: Template lookup problem


A reduced testcase for this one is
--------------------------------------------
struct B { void a (int n); };
struct D: public B {};

template <typename T> struct X {
    template<typename Y>
    static void foo (const Y&, void (T::*)(Y));
};

int main () {
  int n = 3;
  X<D>::foo(n, &D::a);
}
--------------------------------------
The error I get is this one:
x.cc: In function `int main()':
x.cc:11: error: no matching function for call to `X<D>::foo(int&, void
   (B::*)(int))'

Thus, the compiler cannot find a match for X::foo, since &D::a is 
immediately converted to &B::a, i.e. to a pointer to member function of 
the _base_ class, although we have taken a p-t-m-f of the derived class. I 
don't know what the standard says on this one, but at least the failure 
mode is clear now.

The problem can be worked around using a temporary variable of type 
  void (D::*)(int)
or an explicit cast.

Regards
  Wolfgang

-------------------------------------------------------------------------
Wolfgang Bangerth              email:           bangerth@ticam.utexas.edu
                               www: http://www.ticam.utexas.edu/~bangerth



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]