On Saturday, 11 May 2013 at 14:34:41 UTC, TommiT wrote:
I'm trying to assign (or simply bit-copy) over 'this' inside a constructor. There's an error when compile-time constructing the object. Is this a bug in DMD (2.062) ?

module main;

struct Test
{
    enum Test t = Test(1);
    int v;

    this(int)
    {
        v = 123;
    }

    this(int, int)
    {
        this = t;
    }
}

void main()
{
    Test t1 = Test(11, 22);
    writeln(t1.v); // Prints: 123

    enum t2 = Test(11, 22); // Error:
// CTFE internal error: unsupported assignment this = Test(123)
}

what? structs has value semantics, every time you assign a struct to variable it assign its copy.

you also don't have to have constructor for structs, it initializes it fields in left-to-right order or so.


struct A
{       
int x;
}

void main()
{
A s1 = A(1);
A s2 = A(2);
A s3;

s3 = s2;
s2.x = 5;

assert(s3.x == 2);
assert(s2.x == 5);
}

Reply via email to