2026-05-19
This wording clarification intends to remove a ghost (a condition which at this point can only occur when some other UB was already encountered before). The second change makes another related UB explicit. The paper received strong direction and was sent to the wording group. In the discussion it was pointed out that “does not designate an object” should be amended by “during its lifetime” or similar.
The analysis for every path was performed and documented in n3740.
The result of the analysis is that only the case of -> has implicit
UB and all other cases are already explicit.
| number | Title | Authors | Remarks |
|---|---|---|---|
| n3740 | Ghost: Lvalues that do not designate an object (Updates N3701) | Uecker | rationale |
| n3701 | Ghost: Lvalues that do not designate an object | Uecker | |
| n3856 | Draft Minutes for March 9 - 13, 2026 | Svoboda | |
| n3854 | ISO/IEC 9899:202y | Meneide | base |
| n3882 | <this paper> | Wording group |
none
none
| meeting | date | for | against | abstain |
|---|---|---|---|---|
| March 26 | 2026-03 | 19 | 0 | 2 |
Deletions in the shown standard text are as shown here,
additions, as shown here. These may render differently
according to the style in which the document is shown by your browser,
but should always be well distinguishable. In the provided style there
are two visual distinctions:
Close to each other proposed changes resemble like this.
6.3.3.1 Lvalues, arrays, and function designators
1 An lvalue is an expression (with an object type other than
void) that potentially designates an object;43)if an lvalue does not designate an object when it is evaluated, the behavior is undefined. The expressions that are lvalues are specified throughout 6.5.XX) …
XX) If, when it is converted, an lvalue does not designate an object within its lifetime, either a constraint is violated or the behavior is undefined as specified throughout 6.5.
…
Semantics
…
6 A postfix expression followed by the
->operator and an identifier designates a member of a structure or union object. When evaluated, the first operand shall point to a structure or union object within the lifetime of that object. The value is that of the named member of the object to which the first expression points, and is an lvalue.79) If the first expression is a pointer to a qualified type, the result has the so-qualified version of the type of the designated member.
Annex J.2
…
(14) An lvalue does not designate an object when evaluated (6.3.3.1).
…
(32′) The first operand of the -> operator does
not point to a structure or union object within the lifetime of that
object.