Created on 2000-03-06.00:00:00 last changed 33 months ago
Proposed resolution (10/00):
Change 14.2 [except.throw] paragraph 3 from
A throw-expression initializes a temporary object, the type of which is determined...
to
A throw-expression initializes a temporary object, called the exception object, the type of which is determined...
Change 14.4 [except.handle] paragraph 3 from
A handler is a match for a throw-expression with an object of type E if...
to
A handler is a match for an exception object of type E if...
Proposed resolution (10/00):
Change 14.2 [except.throw] paragraph 3 from
A throw-expression initializes a temporary object, the type of which is determined...
to
A throw-expression initializes a temporary object, called the exception object, the type of which is determined...
Change 14.4 [except.handle] paragraph 3 from
A handler is a match for a throw-expression with an object of type E if...
to
A handler is a match for an exception object of type E if...
14.4 [except.handle] paragraph 3 says,
A handler is a match for a throw-expression with an object of type E...
This wording leaves it unclear whether it is the dynamic type of the object being thrown or the static type of the expression that determines whether a handler is a match for a given exception. For instance,
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 is B and not const D (14.2 [except.throw]).
Suggested resolution: Replace the cited wording as follows:
A handler is a match for a throw-expression which initialized a temporary (14.2 [except.throw]) of type E...
History | |||
---|---|---|---|
Date | User | Action | Args |
2022-02-18 07:47:23 | admin | set | messages: + msg6652 |
2003-04-25 00:00:00 | admin | set | status: dr -> tc1 |
2000-11-18 00:00:00 | admin | set | status: ready -> dr |
2000-05-21 00:00:00 | admin | set | messages: + msg331 |
2000-03-06 00:00:00 | admin | create |