On Monday, 6 July 2015 at 15:48:28 UTC, anonymous wrote:

Ok, I disabled everything in the struct except what I posted and it ran. I then uncommented stuff to isolate the cause. I've added in the bits that cause the error below (plus some constructors just for reference).

struct Vector3 {
    public double[3] _p;
    @nogc this(in double[] p)
    {
        switch ( p.length ) {
        case 0: _p[0] = _p[1] = _p[2] = 0.0; break;
        case 1: _p[0] = p[0]; _p[1] = _p[2] = 0.0; break;
        case 2: _p[0] = p[0]; _p[1] = p[1]; _p[2] = 0.0; break;
        default: _p[0] = p[0]; _p[1] = p[1]; _p[2] = p[2]; break;
        }
    }
    @nogc this(in double p0, in double p1=0.0, in double p2=0.0)
    {
        _p[0] = p0;
        _p[1] = p1;
        _p[2] = p2;
    }
    @nogc this(in Vector3 other)
    {
        _p[] = other._p[];
    }
    //...
    Vector3 opBinary(string op)(in Vector3 rhs) const
    if (op == "+"){
        Vector3 result;
        result._p[] = this._p[] + rhs._p[];
        return result;
    }
    // The bits that cause the error:
//... Enabling any one (or more) of the following causes the error
    this(this)
    {
        _p = _p.dup;
    }

    @nogc ref Vector3 opAssign(ref Vector3 rhs)
    {
        _p[] = rhs._p[];
         return this;
    }

    @nogc ref Vector3 opAssign(Vector3 rhs)
    {
        _p[] = rhs._p[];
        return this;
    }
    //...
}

Any ideas about what's happening?

Reply via email to