struct initialization and assignment by field name

bearophile bearophileHUGS at lycos.com
Sat Dec 1 11:32:26 PST 2012


Bobby Bingham:

> It appears that this form of struct literal really can only be 
> used in initializers -- the assignment to a previously declared 
> varaible fails to compile.

Right. That syntax is not much used in D, there were discussions 
about deprecating it fully, I don't know the current status. I 
use it sometimes when I have to initialize an array of many 
structs.


> I'm hoping somebody can shed some light on the rationale for 
> only supporting this form of struct literal in initializers.

I don't know the rationale. There are tons of things I don't know 
the rationale of, despite my efforts to learn.

The normal way to write a struct literal in D is this, that works 
in most cases:

auto foo = MyStruct(42, 'a');


> And also why it's documented to only work for static
> initializers -- is this an error in the documentation,
> or is the compiler allowing things it shouldn't?

It's another little mystery :-) Maybe the DMD compiler used to 
allow that, and then specs were updated and the compiler remained 
unchanged, or the specs where like that since the beginning, but 
the compiler was closer to a C99 one and allowed it. Or maybe 
it's just a compiler bug that allows something that is not 
allowed. Maybe it's Bugzilla worth.

Bye,
bearophile


More information about the Digitalmars-d-learn mailing list