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