Section: 16.4.4 [utility.requirements] Status: New Submitter: Johel Ernesto Guerrero Peña Opened: 2021-11-01 Last modified: 2022-10-01
Priority: 3
View other active issues in [utility.requirements].
View all other issues in [utility.requirements].
View all issues with New status.
Discussion:
This originated from the editorial issues #4863 and #4869.
Some Throws: elements are specified to throw the exceptions an evaluation ofE
exits with.
This wording excludes exceptions thrown involving the initialization and destruction of parameters
of E
, temporaries of E
, and the destruction of the result of E
.
The proposed wording below fixes this with front matter. As if affects more than just Throws: elements, it talks
about requirements and guarantees when E
exits via an exception.
As noted in the originating editorial issues, some LWG members prefer fixing each individual case
of wording used to describe exception propagation rather than patching them up with front matter.
[2022-01-30; Reflector poll]
Set priority to 3 after reflector poll. "Any throwing destructor is library UB already, so there's no need to contort the wording to accommodate those."
Previous resolution [SUPERSEDED]:
This wording is relative to N4901.
Add a new subclause [exception.propagation] at the end of 16.4.4 [utility.requirements] (after 16.4.4.6.2 [allocator.requirements.completeness]):
16.4.4.? Exception propagation requirements [exception.propagation]
-?- Some functions defined in the C++ standard library impose requirements and guarantees R-G when a described evaluationE
exits via an exception. LetF
be an evaluation that is implied by evaluatingE
up to the complete evaluation of its enclosing full-expression. Unless stated otherwise, an execution ofF
that exits via an exception also has R-G imposed. [Note ?: This includes when initializing and destroying parameters, evaluating default arguments, and destroying temporaries (including discarded-value expressions) (7.6.1.3 [expr.call]) exit via an exception. — end note]
[2022-09-28; Johel provides revised wording]
Proposed resolution:
This wording is relative to N4917.
Add a new subclause [exception.propagation] at the end of 16.4.4 [utility.requirements] (after 16.4.4.6.2 [allocator.requirements.completeness]):
16.4.4.? Exception propagation requirements [exception.propagation]
-?- Some functions defined in the C++ standard library impose requirements and guarantees R-G when a described evaluationE
of a constructor or construction exits via an exception. LetF
be the initialization denoted byE
. Unless stated otherwise,F
also has R-G imposed. [Note ?: This includes the initialization of parameters and the evaluation of default arguments as part ofF
. — end note]