[Bug c++/60262] New: explicit destructor call to destructor of Base accepted without using a qualified-id
filip.roseen at gmail dot com
gcc-bugzilla@gcc.gnu.org
Tue Feb 18 11:59:00 GMT 2014
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60262
Bug ID: 60262
Summary: explicit destructor call to destructor of Base
accepted without using a qualified-id
Product: gcc
Version: 4.9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: filip.roseen at gmail dot com
Created attachment 32160
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=32160&action=edit
testcase.cpp
struct Base { };
struct Derived : Base { };
int main () {
Derived * ptr = new Derived;
ptr->~Base (); // illegal
// ...
}
--------------------------------------------------------------------------------
gcc (incorrectly) accepts the above, while clang and icc (among others)
correctly issues a diagnostic saying that the statement marked `// illegal` is
illformed.
Destructors are not inherited and with this the destructor of `Base` is not
found via `ptr->~Base`, as can be read about under [class.virtual]p6:
"Even though destructors are not inherited, <snip />"
This is not to be confused with a qualified explicit destructor call such as
`ptr->Base::~Base ()`, this is correctly accepted and is legal according to
several sections in the standard, including [class.dtor]p13.
More information about the Gcc-bugs
mailing list