this() not executing code on structs

Denis Koroskin 2korden at gmail.com
Fri Oct 23 07:51:40 PDT 2009


On Fri, 23 Oct 2009 18:46:47 +0400, Andrei Alexandrescu  
<SeeWebsiteForEmail at erdani.org> wrote:

> 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

I'd suggest ditching it and enforce explicit member initialization (unless  
a variable is nullable). This will also remove a lot of bloat from  
executables.



More information about the Digitalmars-d mailing list