Time to kill T() as (sometimes) working T.init alias ?

jerro a at a.com
Thu Nov 29 09:12:29 PST 2012


> The original idea is that there should be *no such thing* as 
> default construction of a struct as being anything other than 
> T.init. The default construction of a struct should be a 
> compile time creature, not a runtime one.
>
> Any methods or workarounds to try and make T() produce 
> something different from T.init is bad D practice. The compiler 
> tries to statically head them off, but probably should do a 
> better job of that.

The only reason to associate no parameter constructors with 
default values is because of how C++ works. There is no reason why

Foo foo;                          (1)

should be equivalent to

auto foo = Foo();                 (2)

in D. We could allow constructors with no parameters and make (1) 
equivalent to

auto foo = Foo.init;              (3)

The current workaround when one wants (2) to construct the object 
at runtime is to define a static opCall, but that's messy and 
inconsistent. It's just one more quirk one needs to learn to 
effectively use the language.


More information about the Digitalmars-d mailing list