Thanks for the quick answer.This is ok to fix the source, but I do not understand why it is normal behaviour that the foo() in b hides the one from a. They have different prototypes.
Regards, Pierre Chatelier
This is not a bug in gcc. foo in b hides the one from a. You can "fix" the source by: struct b : public a { virtual int foo(int a) =0; using a::foo; virtual ~b(){} };