Am Dienstag, dem 21.01.2025 um 19:45 +0000 schrieb Joseph Myers:
> On Tue, 21 Jan 2025, Martin Uecker wrote:
> 
> > Coudn't you use the rule that .len refers to the closest enclosing structure
> > even without __self__ ?  This would then also disambiguate between 
> > designators
> > and other uses.
> 
> Right now, an expression cannot start with '.', which provides the 
> disambiguation between designators and expressions as initializers. 

You could disambiguate directly after parsing the identifier, which
does not seem overly problematic.

>  Note 
> that for counted_by it's the closest enclosing *definition of a structure 
> type*.  That's different from designators where the *type of an object 
> being initialized by a brace-enclosed initializer list* is what's 
> relevant.

You would have to treat the members of the referenced structure
type  as in scope.  But this does not seem too absurd, because

counted_by ( (struct foo){ .len = 1 }.len ) )

could also be written with an inline definition:

counted_by ( (struct foo { int len; }){ .len = 1 }.len ) )

and then it would be natural to think of "len" as being in scope
inside the initializer.  


Martin


Reply via email to