gcc 4.0 gives an error message for the following file: struct X { void destroy_me() { X::~X(); } }; This code is incorrect, so an error message is appropriate. However, the error message isn't likely to be useful.
The error message we get is: foo.cc: In member function 'void X::destroy_me()': foo.cc:2: error: '~X' is not a member of 'X' But that's not the real problem. Obviously ~X() is a member of X. The real problem is that this is the wrong syntax for an explicit destructor invocation: the user should have written this->X::~X(), not X:: ~X() by itself. (See the formal grammar for postfix expressions in 5.2/1, and the discussion of pseudo-destructor calls in 5.2.4, to see why this code is incorrect.) -- Summary: Misleading error message for ill-formed explicit destructor invocation Product: gcc Version: 4.0.0 Status: UNCONFIRMED Severity: minor Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: austern at apple dot com CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: all GCC host triplet: all GCC target triplet: all http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19243