https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95321
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #1) > I don't think this is valid: > BY the time operator delete gets called the deconstructor is called and > therefor the object no longer exists therefor: > void operator delete (void * ptr) > { > if (ptr != nullptr) static_cast<IDestroyable *>(ptr)->Destroy(); > } > > Is invalid code as the vtable in ptr is no longer valid. s/invalid/undefined/