1 // { dg-do run } 2 3 // Copyright (C) 2005 Free Software Foundation, Inc. 4 // Contributed by Nathan Sidwell 17 Oct 2005 <nathan@codesourcery.com> 5 6 // PR 24386:Wrong virtual function called 7 // Origin: Scott Snyder snyder@fnal.gov 8 9 struct A 10 { FooA11 virtual int Foo () { return 1; } 12 }; 13 struct B : public A 14 { FooB15 virtual int Foo () { return 2; } 16 }; 17 18 template <class T> Bar(T * a)19int Bar (T *a) 20 { 21 if (static_cast<A*>(a)->A::Foo () != 1) 22 return 1; 23 if (static_cast<A*>(a)->Foo () != 2) 24 return 2; 25 return 0; 26 } 27 main()28int main () 29 { 30 return Bar (new B); 31 } 32