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 ([stmt.dcl]).
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.