Walter Bright wrote:
Don wrote:
Now that we have struct literals, the old C-style struct initializers don't seem to be necessary. The variations with named initializers are not really implemented -- the example in the spec doesn't work, and most uses of them cause compiler segfaults or wrong code generation. EG...

struct Move{
   int D;
}
enum Move genMove = { D:4 };
immutable Move b = genMove;

It's not difficult to fix these compiler problems, but I'm just not sure if it's worth implementing. Maybe they should just be dropped? (The { field: value } style anyway).



Funny, I've been thinking the same thing. Those initializers are pretty much obsolete, the only thing left is the field name thing. To keep the field name thing with the newer struct literals would require named function parameters as well, something doable but I'm not ready to do all the work to implement that yet.

Or just drop the field name thing, as you suggest.

Dropping the whole lot would make it easier to identify delegate literals. I think the code below is quite wierd.

struct A { int x; }
alias void delegate () B;

void bar1(A a) {}
void bar2(B b) {}


void main()
{
  A a = {  };
  B b = {  };

  bar1(a);  // ok
  bar2(b);  // ok
  bar1( {} ); // fails.  And you can't even do:  bar1( cast(A){} );
  bar2( {} ); // ok
}

I suspect that there are all kinds of odd corner cases involving these guys, which haven't been explored.

Reply via email to