Each layer requires different ways of exception handling although they may be interrelated, e.g. a CPU interrupt could be turned into an OS signal.
[4] Common exceptions include an invalid argument (e.g. value is outside of the domain of a function),[5] an unavailable resource (like a missing file,[6] a network drive error,[7] or out-of-memory errors[8]), or that the routine has detected a normal condition that requires special handling, e.g., attention, end of file.
[9] Social pressure is a major influence on the scope of exceptions and use of exception-handling mechanisms, i.e. "examples of use, typically found in core libraries, and code examples in technical books, magazine articles, and online discussion forums, and in an organization’s code standards".
[10] Exception handling solves the semipredicate problem, in that the mechanism distinguishes normal return values from erroneous ones.
In languages without built-in exception handling such as C, routines would need to signal the error in some other way, such as the common return code and errno pattern.
The standard recommends several usage scenarios for this, including the implementation of non-default pre-substitution of a value followed by resumption, to concisely handle removable singularities.
For example, the 1996 Cluster spacecraft launch ended in a catastrophic explosion due in part to the Ada exception handling policy of aborting computation on arithmetic error.