// { dg-do compile }
// Contributed by Wolfgang Bangerth <bangerth at ticam dot utexas dot edu>
// PR c++/509: Make sure specializations of member templates match correctly
//  between template and non-template overloads.

template <class T>
struct A {
  template <class U> void f (U);
  void f2 (int);

  template <class U> void h (U);
  void h (long);
};

template <>
struct A<float> {
  template <class U> void g (U);
  void g2 (float);
};

template <> void A<int>::f (int);                    // { dg-error "" }
// { dg-message "need 2" "" { target *-*-* } .-1 }
template <> template <> void A<int>::f (int);

template <> void A<int>::f2 (int);
template <> template <> void A<int>::f2 (int);       // { dg-error "" }

template <> void A<float>::g (float);
template <> template <> void A<float>::g(float);     // { dg-error "" }

template <> void A<float>::g2 (float);               // { dg-error "" }
template <> template <> void A<float>::g2(float);    // { dg-error "" }

template <> void A<long>::h (long);
template <> template <> void A<long>::h(long);
