Does D have too many features?

Jonathan M Davis jmdavisProg at gmx.com
Tue May 1 22:26:42 PDT 2012


On Wednesday, May 02, 2012 07:17:20 Maxim Fomin wrote:
> On Wednesday, 2 May 2012 at 03:38:41 UTC, Adam D. Ruppe wrote:
> > On Wednesday, 2 May 2012 at 03:22:02 UTC, Andrei Alexandrescu
> > 
> > wrote:
> >> One feature to remove stands out - the struct initialization:
> >> S s = { 1, 2 };
> > 
> > I could live without that one, because D has an alternative:
> > 
> > auto s = S(1, 2);
> 
> It has the same problem as the first one: members are part of the
> interface and a new one: struct literals are impossible if opCall
> is defined (if I am not mistaken).

Yes, members are part of the interface, but if {1, 2} isn't legal, then their 
order isn't part of the interface as far as constructing the object is 
concerned (the memory layout is, so low-level stuff could still be broken by 
swapping or adding member variables, but the construction doesn't have to stop 
working like it does with a C struct literal).

And defining opCall shouldn't have any effect on S(1, 2). S(1, 2) is clearly 
calling the constructor. The only reason that you would have a conflict is if 
you also defined a static opCall which conflicted. If a non-static opCall has 
_any_ effect on S(1, 2), then it's a bug.

- Jonathan M Davis


More information about the Digitalmars-d mailing list