This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 112c. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
[Accepted as a DR at the June, 2023 meeting.]
Neither 14.2 [except.throw] nor 7.6.18 [expr.throw] specifiy the source for copy-initializing the exception object.
Proposed resolution (based on the resolution of issue 2699; approved by CWG 2023-06-12):
Change in 7.6.18 [expr.throw] paragraph 2 as follows:
Evaluating a throw-expression with an operand throws an exception (14.2 [except.throw]); the type of the exception object is determined by removing any top-level cv-qualifiers from the static type of the operand and adjusting the type from “array of T” or function type T to “pointer to T”.
Change in 14.2 [except.throw] paragraph 3 as follows:
Throwing an exception
copy-initializes (9.4 [dcl.init], 220.127.116.11 [class.copy.ctor])a temporary object, called the exception object. If the type of the exception object would be an incomplete type , an abstract class type (11.7.4 [class.abstract]), or a pointer to an incomplete type other than cv void the program is ill-formed.