I've tested the following with dmd 2.037.

The compiler generated opAssign is disabled by the definition of opAssign(int). The compiler rejects the following assignment operation. (The error message is in the comment below.)

Is this by design?

When I also define post-blit, the compiler generated opAssign is available again and seems to work correctly. (My struct doesn't have any members for brevity.)

The program below compiles when this(this) is provided.

void main()
{
    S s0;
    s0 = s0;    // ERROR
}

struct S
{
    /*
      1) Define just opAssign(int); the compiler rejects the code:

       Error: function deneme.S.opAssign (int) is not callable
              using argument types (S)

       Error: cannot implicitly convert expression (s0) of
              type S to int
    */
    ref S opAssign(int)
    {
        return this;
    }

    /*
      2) Uncomment post-blit; the above error disappears and
         the compiler generated opAssign works as expected
     */
//     this(this)
//     {}
}

What is the logic behind it?

Thank you,
Ali

Reply via email to