1// { dg-do assemble  }
2
3class A {
4public:
5  virtual void f();
6  int i;
7};
8
9class B : public A {
10public:
11  void f();
12  int j;
13};
14
15template <void (A::*)() >
16void g() {}
17template <int A::*>
18void h() {}
19
20
21int main() {
22  g<&A::f>();
23  h<&A::i>();
24  g<&B::f>(); // { dg-error "" }
25  h<&B::j>(); // { dg-error "" }
26  g<(void (A::*)()) &A::f>(); // { dg-error "" }
27  h<(int A::*) &A::i>(); // { dg-error "" }
28  g<(void (A::*)()) &B::f>(); // { dg-error "" }
29  h<(int A::*) &B::j>(); // { dg-error "" }
30  g<(void (A::*)()) 0>(); // { dg-error "" }
31  h<(int A::*) 0>(); // { dg-error "" }
32
33  return 0;
34}
35