http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58140
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Tudor Bosman from comment #0) > In C++11, we can declare a class as "final" to indicate that it can't be > derived from. In that case, having a public non-virtual destructor is fine, > even if the class has virtual methods (no derived classes exist, so deleting > an instance via a pointer is always safe). N.B. this is only true if there's no base class with a public destructor, which is true for your example, but not in general.