LDC, ARM: unnecessary default initialization

kinke via Digitalmars-d digitalmars-d at puremagic.com
Fri Aug 18 10:28:38 PDT 2017


On Friday, 18 August 2017 at 12:09:04 UTC, kinke wrote:
> On Friday, 18 August 2017 at 09:42:25 UTC, Jack Applegame wrote:
>> For some reason, the LDC default initializes the structure, 
>> even if initialization of all its members is specified as 
>> void. I believe that this is wrong.
>
> Afaik, this has been brought up multiple times already and is 
> so by design. Every aggregate has an init symbol, omitting that 
> (and accordingly the default initialization of all instances) 
> by initializing each field with void doesn't work. The 
> initialization isn't performed fieldwise, but is a bitcopy of 
> T.init.
> You can skip initialization of specific instances though - `S s 
> = void;` - but again not if `s` is a field of another aggregate.

Sorry, I forgot some workaround code:

void ResetHandler() {
     Foo foo = void;
     foo.__ctor(10);
     // or: std.conv.emplace(&foo, 10);
}


More information about the Digitalmars-d mailing list