On exit from a scope (however accomplished), objects with automatic storage
duration that have been constructed in that scope are destroyed
in the reverse order of their construction.
However, the program can be terminated (by calling
std::exit() or
std::abort() ([support.start.term]), for example) without
destroying objects with automatic storage duration.