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.

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