From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3383 invoked by alias); 31 Mar 2008 06:42:16 -0000 Received: (qmail 2713 invoked by uid 48); 31 Mar 2008 06:41:31 -0000 Date: Mon, 31 Mar 2008 06:42:00 -0000 Message-ID: <20080331064131.2712.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug c++/35772] GCC allows defining pure virtual functions In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "herwig at gdsys dot de" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2008-03/txt/msg02526.txt.bz2 ------- Comment #1 from herwig at gdsys dot de 2008-03-31 06:41 ------- 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 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. 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 > { > } > //---------------------------------- > -- herwig at gdsys dot de changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |herwig at gdsys dot de http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35772