GCC compiles the code below without any error: //---------------------------------- class A { protected: virtual void foo() const = 0; }; // Defining pure virtual functions should not be allowed. void A::foo() const { } //----------------------------------
Hi yuri, I think, this is perfectly correct code and GCC is right in accepting it. First of all, see "Effective C++" issue 14 about the pure virtual destructor. Then see here: http://en.wikipedia.org/wiki/Virtual_function#Abstract_classes_and_pure_virtual_functions <cite> Although pure virtual methods typically have no implementation in the class that declares them, pure virtual methods in C++ are permitted to contain an implementation in their declaring class, providing fallback or default behaviour that a derived class can delegate to if appropriate. </cite> Regards, Björn Herwig (In reply to comment #0) > GCC compiles the code below without any error: > > //---------------------------------- > class A { > protected: > virtual void foo() const = 0; > }; > > // Defining pure virtual functions should not be allowed. > void A::foo() const > { > } > //---------------------------------- >
Hi Björn, Thank you for the link and setting me straight. You are correct, implementation of a pure virtual function by the class that declares it makes sense. It is just the class itself remains abstract. Earlier today I had a problem with dynamic library loading and it disappeared only after I removed an implementation of a pure virtual method from a declaring class. I thought this was a problem, but it looks like I need to look more at what was happening. Regards, Yuri (In reply to comment #1) > Hi yuri, > > I think, this is perfectly correct code and GCC is right in accepting it. First > of all, see "Effective C++" issue 14 about the pure virtual destructor. Then > see here: > > http://en.wikipedia.org/wiki/Virtual_function#Abstract_classes_and_pure_virtual_functions > > <cite> > Although pure virtual methods typically have no implementation in the class > that declares them, pure virtual methods in C++ are permitted to contain an > implementation in their declaring class, providing fallback or default > behaviour that a derived class can delegate to if appropriate. > </cite> > > Regards, > Björn Herwig > > (In reply to comment #0) > > GCC compiles the code below without any error: > > > > //---------------------------------- > > class A { > > protected: > > virtual void foo() const = 0; > > }; > > > > // Defining pure virtual functions should not be allowed. > > void A::foo() const > > { > > } > > //---------------------------------- > > >