This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 115d. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2024-10-26
[Accepted as a DR at the February, 2019 meeting.]
Section 9.2.6 [dcl.constexpr] bullet 3.4 specifies a list of constructs that that the body of a constexpr function shall not contain. However, the meaning of the word “contain” is not clear. For example, are things appearing in the body of a nested constexpr lambda “contained” in the body of the constexpr function?
Proposed resolution (November, 2018):
Add the following two paragraphs after Clause 8 [stmt.stmt] paragraph 1:
...The optional attribute-specifier-seq appertains to the respective statement.
A substatement of a statement is one of the following:
for a labeled-statement, its contained statement,
for a compound-statement, any statement of its statement-seq,
for a selection-statement, any of its statements (but not its init-statement), or
for an iteration-statement, its contained statement (but not an init-statement).
[Note: The compound-statement of a lambda-expression is not a substatement of the statement (if any) in which the lambda-expression lexically appears. —end note]
A statement S1 encloses a statement S2 if
S2 is a substatement of S1 (Clause 9 [dcl.dcl]),
S1 is a selection-statement or iteration-statement and S2 is the init-statement of S1,
S1 is a try-block and S2 is its compound-statement or any of the compound-statements of its handlers, or
S1 encloses a statement S3 and S3 encloses S2.
Delete the following sentence from 8.5 [stmt.select] paragraph 1:
In Clause 8 [stmt.stmt], the term substatement refers to the contained statement or statements that appear in the syntax notation.
Change 9.2.6 [dcl.constexpr] bullet 3.3 as follows:
The definition of a constexpr function shall satisfy the following requirements:
...
its function-body shall be = delete, = default, or a compound-statement that does not
containenclose (Clause 8 [stmt.stmt]
...