You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
CWG2924 [dcl.attr.assume, dcl.attr.noreturn] Clarify that violation of the restrictions of standard attributes does not cause undefined behavior in constant evaluation #595
Per the discussion in cplusplus/draft#7206, the intent seems to be that in the evaluation of a constant expression, violation of the restrictions of standard attributes either make the expression not a constant expression or has no effect, and no UB should be introduced in constant evaluation.
Suggested resolution:
Modify [expr.const] as indicated:
[...]
(5.8) - an operation that would have undefined or erroneous behavior as specified in [intro] through [cpp], excluding [dcl.attr.assume] and [dcl.attr.noreturn];
[...]
Modify [dcl.attr.assume] as indicated:
[...] If the converted expression would evaluate to true at the point where the assumption appears, or in the evaluation of a core constant expression ([expr.const]), the assumption has no effect. Otherwise, the behavior is undefined. [...]
Add a new note after [dcl.attr.assume] Note 1:
[Note ?: If the converted expression would not evaluate to true in the evaluation of a core constant expression, the evaluation possibly fails. — end note]
Modify [dcl.attr.noreturn] as indicated:
If a function f is called where f was previously declared with the noreturn attribute and f eventually returns and the function call is not evaluated in the evaluation of a core constant expression ([expr.const]), the behavior is undefined.
Add a new note after [dcl.attr.noreturn] Note 1:
[Note ?: If a noreturn function returns in the evaluation of a core constant expression, the evaluation possibly fails. — end note]