Open
Description
We have recently made sure none of our destructors throws (unless a preprocessor definition is set): #728 . However - that is actually a bit too strict of a policy, for avoiding termination. Rather we can use std::uncaught_exception()
(or uncaught_exceptions()
in C++17 and later) to decide whether or not we can safely throw. Let's do that.