struct and default constructor
deadalnix
deadalnix at gmail.com
Sun Nov 27 13:43:13 PST 2011
Le 27/11/2011 22:24, Simen Kjærås a écrit :
> On Sun, 27 Nov 2011 21:19:38 +0100, deadalnix <deadalnix at gmail.com> wrote:
>
>> In addition, here is a workaround :
>>
>> // Wonderfull !
>> @disable this();
>>
>> // Default constructor workaround.
>> this(int dummy = 0) { ... }
>>
>> But that look very dirty and it feels like working against the language.
>
> I believe your "workaround" will disappoint you, as it simply does not run.
>
> import std.stdio;
>
> struct A {
> int value;
> @disable this();
> this(int dummy = 0) {
> value = 3;
> writeln("Hello from struct default constructor!"); // Never happens.
> }
> }
>
> void main() {
> A a = A();
> writeln( a.value ); // Writes 0
> }
>
> More importantly, this shows a bug in DMD - namely that structs with
> @disabled default constructors can be created without a call to any
> constructor and with no error message. In fact, if one removes the
> constructor with dummy arguments, the program still compiles.
>
> http://d.puremagic.com/issues/show_bug.cgi?id=7021
So that is even worse that what I though. This struct situation is very
messy and inconsistent. We should definie what we want for that and have
a descent spec.
I just found something new : if you disable this(this), then opAssign
should be allowed (it is allowed, according to the website, when
implicit cast doesn't exists). The copy don't work with opAssign and
disabled postblit . . .
More information about the Digitalmars-d
mailing list