An argument in the catch argument of a handler matches
an argument in the
assignment_expression of the throw expression
(throw argument) if any of the following conditions is met:
- The catch argument type matches the type of the thrown object.
- The catch argument is a public base class of the thrown class
object.
- The catch specifies a pointer type, and the thrown object is a
pointer type that can be converted to the pointer type of the catch
argument by standard pointer conversion.
Note: If the type of the thrown object is const or volatile,
the catch argument must also be a const or volatile for
a match to occur. However, a const, volatile,
or reference type catch argument can match a nonconstant, nonvolatile,
or nonreference object type. A nonreference catch argument type matches
a reference to an object of the same type.