If a program throws an unhandled exception it terminates in an implementation-defined manner. In particular, it is implementation-defined whether the call stack is unwound before termination, so the destructors of any automatic objects may or may not be executed. By enforcing the provision of a “last-ditch catch-all”, the developer can ensure that the program terminates in a consistent manner.


The possible exceptions from a program should be caught as a matter of course. This rule’s objective is to ensure that exceptions that were _not_ expected are also caught.
