// PR c++/100588 // { dg-do run { target c++20 } } extern "C" void abort (); extern "C" int puts (const char *); #include #ifndef DEBUG #define puts(S) #endif class A { public: A() { throw 42; } ~A() { puts("A::~A"); } void operator delete(void* p) { puts("regular delete invoked"); ::operator delete(p); } void operator delete(A* p, std::destroying_delete_t) { puts("destroying delete invoked"); p->~A(); ::operator delete(p); abort (); } }; int main() { try { new A; } catch (int) { } }