Allow designated initialization of struct
Nick Treleaven
nick at geany.org
Fri Sep 13 10:55:11 UTC 2024
On Thursday, 12 September 2024 at 12:14:17 UTC, ryuukk_ wrote:
> ```D
> struct Test
> {
> int test;
> }
>
> struct Data
> {
> Test[8] test;
> }
>
> void add(Data data)
> {
> }
>
> extern(C) void main()
> {
> add( Data(test: [ {test: 1}] ) );
> }
>
> ```
You are passing a struct literal to `add`. A struct literal is an
expression:
https://dlang.org/spec/struct.html#struct-literal
> A struct literal consists of the name of the struct followed by
> a parenthesized named argument list
So `[ {test: 1}]` is parsed as an array literal (because it is an
expression), not an array intializer. `{test: 1}` in expression
context is parsed as an invalid function literal (because there's
no semi-colon).
More information about the dip.ideas
mailing list