Wording for “Ghost: Lvalues that do not designate an object”

Martin Uecker

2026-05-19

Preamble

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

LaTeX document branch

none

Liaison

none

Relevant polls

Along the lines of n3740

meeting date for against abstain
March 26 2026-03 19 0 2

Proposed wording

Legend

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.

Modifications in clause 6.3.3.1

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.

Modifications in clause 6.5.3.4

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.

Modifications in Annex J.2

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.