this() not executing code on structs

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Fri Oct 23 07:46:47 PDT 2009


Don wrote:
> Bartosz Milewski wrote:
>> Andrei Alexandrescu Wrote:
>>
>>>     this() { myCount = count++; }       // ERROR
>>
>> It's worse than that. Try this:
>>
>> struct foo {
>>        this(int dummy = 0) { writeln("Default constructor");}
>> }
>>
>> foo x = foo();
>>
>> Nothing gets printed. If default constructors are disallowed, so 
>> should constructors with all parameters defaulted.
> 
> Ouch.
> It's because it's interpreting foo() as a struct literal.
> If a struct has any constructors, struct literals should be disabled.

http://d.puremagic.com/issues/show_bug.cgi?id=3438

The more I think of it, the more imperious it becomes that we allow 
default constructors that execute code. The main question is what to do 
about .init.

Andrei



More information about the Digitalmars-d mailing list