At the moment it only warns, if there _is_ a non-virtual destructor: -Wnon-virtual-dtor (C++ only) Warn when a class appears to be polymorphic, thereby requiring a virtual destructor, yet it declares a non-virtual one. This warning is enabled by -Wall. It doesn't warn if it was forgotten to declare a destructor. (But the compiler creates a non-virtual one implicitly). Are there reasons not to warn about it? #include <iostream> struct A { // assume it is forgotten, you don't get any warnings about that: // virtual ~A() {} virtual void justDoIt() = 0; }; struct B : public A { int i; void justDoIt() { i = 5; } virtual ~B() { std::cout << i << std::endl; } }; int main() { B b; b.justDoIt(); A* a = new B; a->justDoIt(); // B destructor won't be called, since A's destructor is not virtual delete a; } Output: 5
-- Summary: RFE: -Wnon-virtual-dtor/-Wall should warn when a class appears to be polymorphic and there is no destructor at all Product: gcc Version: 3.3.5 Status: UNCONFIRMED Severity: enhancement Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: andyreif at studcs dot uni-sb dot de CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20560