// { dg-do link  }
template<class T>
class foo {
  T deft;
  template<class U> int priv (U u, T t) { return u - t; }
public:
  foo (T t) : deft (t) {}
  template<class U> int pub (U u) {
    int (foo::*fn) (U, T);
    fn = &foo<T>::template priv<U>;
    return (this->*fn) (u, deft);
  }
};
int
main ()
{
  foo<long> fff (5);
  return fff.pub (3);
}