https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72768
--- Comment #6 from lh_mouse <lh_mouse at 126 dot com> --- > But then if the delegating constructor throws you would run the destructor > twice e.g. The `atexit()` callback in question can check the `__cxa_guard` of the object to determine whether it should call the destructor. Lack of a guard object (when the static object has namespace scope instead of block scope) is out of question because throwing anything out of the constructor would result in a call to `std::terminate()`.