Hi Matthew. Take a look at http://www.parashift.com/c++-faq-lite/strange-inheritance.html#faq-23.7 You are hiding all A::f() by declaring a B::f(). 'using' should help. HTH, Peter On Thursday 18 August 2005 16:10, Matthew Jones wrote: > Why does the following code generate an error ? > This error is described in the gcc manual under the C++ > -Woverloaded-virtual flag. I can't see why gcc can't generate a call to > A::f(Y). This exactly against the behaviour one would expect under the > basic principles of polymorphism. > (gcc 3.4.3). > > > struct X{}; > struct Y{}; > struct Z{}; > > struct A > { > virtual void f(X); > virtual void f(Y); > virtual void f(Z); > }; > > struct B: public A > { > virtual void f(X); > }; > > void Test (void) > { > B b; > X x; > Y y; > > b.f(x); > b.f(y); // error: no matching function for call to 'B::f(Y&)' > } > > -- > Matthew JONES > http://www.tandbergtv.com/