On Sunday, 2 October 2022 at 23:30:16 UTC, ryuukk_ wrote:
```D
MyStruct test = void;
```

Does this guarantee that the compiler will not initialize it?

It's more of a request, than a guarantee. For example, `= void` may be ignored for the fields of `struct`s and `class`es:
```D
struct ABC {
    char a = 'a';
    char b = void;
    char c = 'c';
}

void main() @safe {
    import core.lifetime : emplace;
    import std.stdio : write, writeln;

    ABC abc = { a: 'x', b: 'y', c: 'z' };
    emplace(&abc);
    write(`a: '`, abc.a, `', b: '`);
    if(abc.b != 0)
        write(abc.b);
    else
        write(`\0`);
    writeln(`', c: '`, abc.c, `'`);
}
```

If the `= void` actually prevented initialization of `b`, the above would print:
```
a: 'a', b: 'y', c: 'c'
```
However, it actually prints this instead on all D compilers with which I tested:
```
a: 'a', b: '\0', c: 'c'
```
This is because it is considered needlessly complicated - and, at least for smallish types, possibly actually slower - to support uninitialized gaps when blitting `.init` values.

Does it work with static arrays of struct too?

Yes.

Reply via email to