On 10/3/22 09:35, tsbockman wrote:
On Sunday, 2 October 2022 at 23:45:45 UTC, drug007 wrote:
It works but not as someone could expect. In case of
```D
Foo[2] arr = void;
```
`arr` value is not defined, it is not an initialized array of uninitialized elements like you want, it is just uninitialized array.

This is incorrect. It is not possible to declare an uninitialized static array variable in D; only the elements are affected by `= void`.

The meta data of a static array like `Foo[2] arr` (`.ptr` and `.length`) is determined statically at compile time and inserted where needed into the generated code. It is not stored in mutable memory the way a dynamic array/slice's meta data is, and does not need to be initialized at run time.


You are right. I used to complex structure (with indirections) for testing and made wrong statement.

By contrast, it **is** possible to declare a completely uninitialized dynamic array, or to just leave its elements uninitialized:
```D
     // Meta data is not initialized, and no elements are allocated.
     // This has no static array equivalent:
     int[] arrA = void;

    // Meta data is initialized, and elements are allocated but not initialized.
     // This is the dynamic equivalent of the static:
     // int[2] arr = void;
     int[] arrB = uninitializedArray!(int[])(2);
```

Reply via email to