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