The C++ Standard, [except.handle], paragraph 4 [ISO/IEC 14882-2014], states the following:
The handlers for a try block are tried in order of appearance. That makes it possible to write handlers that can never be executed, for example by placing a handler for a derived class after a handler for a corresponding base class.
Consequently, if two handlers catch exceptions that are derived from
the same base class (such as
), the most derived exception must come first.
Noncompliant Code Example
In this noncompliant code example, the first handler catches all
exceptions of class
, as well as exceptions of class
, since they are also of class
. Consequently, the second handler does not catch any exceptions.
In this compliant solution, the first handler catches all exceptions
, and the second handler catches all the other exceptions of class