Bug: Failure to compile legal code (gcc-2.95.2)

Mike Harrold mharrold@cas.org
Wed Jan 17 07:08:00 GMT 2001


> 
> Hi Mike,
> 
> Alexandre Oliva gave you the right answer.  In your example, the
> declaration of B::operator<<(int) does indeed hide A::operator<<(const
> char*).  The fact that it is a virtual method means nothing.
> 
> In ISO C++, you are suppose to be able to do this:
> 
> [...]
> 
> class B : public A
> {
> public:
> 
>   using A::operator<<;
>   virtual A& operator<<(int);
> };
> 
> [...]
> 
> to ensure that overloading works as you had expected.  However, 2.95.2
> doesn't implement that form of using.  g++ 3.0 gets this right.
> 
> If you really want to understand why this works this way, see _The
> Design and Evolution of C++_. pg 76.  I'm sure that other great tomes
> from Stroustrup reveal this information as well.

I will have to check this out. This seems so counter-intuitive to me.
Thanks for the clarification.

/Mike



More information about the Gcc-bugs mailing list