strange behavior...

Thierry DESCOMBES descombt@ipnl.in2p3.fr
Tue Nov 22 14:22:00 GMT 2005


Hi,

I'm using "gcc version 3.4.3 (Mandrakelinux 10.2 3.4.3-7mdk)". (but same  
thing occurs on a older version).

I fall into an "invalid covariant return type" during a project  
development. I didn't manage to reproduce this error, in a short  
example... But, while trying, I fall into a very strange behavior. I find  
an example which worked or failed at compil time depanding on the way the  
class inherit together (it works when public and fails when private) !!

So, this is working

   class A {};

   class B
   {
      virtual A* getA();
   };

   class D_A : public A {};

   class D_B : public B
   {
     virtual D_A* getA();
   };

and, this is not working:

   class A {};

   class B
   {
      virtual A* getA();
   };

   class D_A :  A {};

   class D_B :  B
   {
     virtual D_A* getA();
   };

and is producing:
test2.cc:23: error: invalid covariant return type for `virtual D_A*  
D_B::getA()'test2.cc:9: error: overriding `virtual A* B::getA()'

Very strange, isn't it ?

Cheers,
T.



More information about the Gcc-bugs mailing list