http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59246
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2013-11-22 Ever confirmed|0 |1 --- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Ryou Ezoe from comment #0) > // call by unqualified name is virtual function call. > // virtual function call during destruction is undefined. N.B. it's only undefined if the function is a pure virtual, not in general, and you do get a warning: pv.cc: In destructor ‘virtual Base::~Base()’: pv.cc:14:7: warning: pure virtual ‘virtual void Base::f()’ called from destructor [enabled by default] f() ; ^ Here's a complete testcase (you can't get a runtime error if your program can't be run!) struct Base { virtual void f() = 0 ; virtual ~Base() ; } ; // pure virtual function with definition void Base::f() { } Base::~Base() { // call by unqualified name is virtual function call. // virtual function call during destruction is undefined. f() ; } struct Derived : Base { void f() { } }; int main() { Derived d; }