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);
```