Ali Cehreli Wrote:

> (I must be missing something here

Yes I am! :)

> I've been under the impression that struct members would always be 
> initialized. Having seen D an init-happy language compared to C and C++, 
> that's what I would have expected. :)

I still think that it should be the default behavior unless no-initialization 
was specifically requested, like the case for uninitialized arrays.

> struct S
> {
>     int i;
>     double d;
> }
[...]
> Also, leaving out some of the initializers do not init the corresponding 
> members either:
> 
>     S s = { 42 };
> 
> There, s.d is not double.init.

The spec says "Members not specified in the initializer list are default 
initialized" for *static* objects. So this works:

    static S s = { 42 };
    dout.writefln(s.d);       // prints nan

This check fails though:

    assert(s.d == double.nan);

and it is probably not meant to work anyway; because I see that the spec at

    http://www.digitalmars.com/d/2.0/float.html

has this to say (probably recently modified):

   x == x → true      not valid if x is a NaN

> struct S
> {
>     int i     = 1;
>     double d  = 2.3;
> }
> 

>     S s = { 42 };

Good: That does set s.d... :)

Ali

Reply via email to