Which part of the C standard allows this code to compile?

What you have is an incomplete type (ISO/IEC 9899:1999 and 2011 — all these references are the same in both — §6.2.5 ¶22):

A structure or union type of unknown content (as described in §6.7.2.3) is an incomplete
type.

An incomplete type can still be an lvalue:

§6.3.2.1 ¶1 (Lvalues, arrays, and function designators)

An lvalue is an expression with an object type or an incomplete type other than void; …

So as a result it’s just like any other unary & with an lvalue.

Leave a Comment