https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83400
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- If the destructor uses a dynamic exception-specification then it works correctly: ~ThrowInDtor() throw(long) { in dtor terminate called after throwing an instance of 'long' Aborted (core dumped)