When an exception is thrown, the value of the object in the throw expression is used to initialize an anonymous temporary object called the exception object. The type of this exception object is used to transfer control to the nearest handler (that is, catch
clause, which contains an exception declaration) with a matching type. The C++ Standard, [except.handle], paragraph 16 [ISO/IEC 14882-2014], states, in part:
...