This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 119a. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2025-12-20
14.4 [except.handle] paragraph 3 says,
Ahandler is a match for athrow-expression with anobject of typeE...
This wording leaves it unclear whether it is the dynamic type of theobject being thrown or the static type of the expression thatdetermines whether a handler is a match for a given exception. Forinstance,
struct B { B(); virtual ~B(); }; struct D : B { D(); }; void toss(const B* b) { throw *b; } void f() { const D d; toss(&d); }In this code, presumably the type to be matched isB and notconst D (14.2 [except.throw]).
Suggested resolution: Replace the cited wording as follows:
Ahandler is a match for athrow-expression whichinitialized a temporary (14.2 [except.throw]) of typeE...
Proposed resolution (10/00):
Change 14.2 [except.throw] paragraph 3 from
Athrow-expression initializes a temporary object, the type ofwhich is determined...
to
Athrow-expression initializes a temporary object, called theexception object, the type of which is determined...
Change 14.4 [except.handle] paragraph 3 from
Ahandler is a match for athrow-expression with anobject of typeE if...
to
Ahandler is a match for an exception object of typeEif...