On Tue, 6 Aug 2024, Alejandro Colomar wrote:
> > Next question for the specification, implementation and tests: how does
> > this feature interact with the rules on external definitions (the contexts
> > in which it's OK to refer to an identifier with internal or external
> > linkage that's never defined - for example, a function, static or extern,
> > with a declaration but no definition; see 6.9.1)?
>
> Functions are not array types, so they don't apply. It's a constraint
> violation --mandatory error-- to call __lengthof__(func).
>
> VLAs cannot have static storage duration or file scope. Any array that
> has static storage duration or extern linkage must be a normal array.
> Since normal arrays operands are not evaluated, __lengthof__ returns a
> constant expression, and there's no issue at all.
>
> I can't think of any case where we'd have problems; do you have any
> other example?
static int f(), f2();
int a[10][10];
int x;
void
g()
{
__lengthof__ (a[f()]); // Should be valid that f is not defined.
int b[x][x];
__lengthof__ (b[f2()]); // Should be invalid that f2 is not defined.
}
--
Joseph S. Myers
[email protected]