1// { dg-do run  }
2extern "C" void abort();
3
4template <class T>
5int f(T)
6{
7  struct S1 {
8    virtual int foo() { return 1; }
9  };
10
11  struct S2 : public S1 {
12    int foo() { return 2; }
13  };
14
15  S1* s2 = new S2;
16
17  return s2->foo();
18}
19
20
21int main()
22{
23  if (f(3) != 2)
24    abort();
25}
26