struct S( Element )
{
    Element[] data;

    this( in uint len )
    {
        data.length = len;
    }

    ref Element opIndex( in uint n )
    {
        return data[n];
    }

    ref Element opIndexAssign( in Element a, in uint n )
    {
        data[n] += a;
        return data[n];
    }

    invariant()
    {
        // If I comment out next line compilation goes smoothly:
        assert( Element.sizeof > 0 );
    }
}

void main()
{
    alias S!(double) st;
    st test = st(20);
    auto a = test[2];
    test[2] = 3;
}

compilation error:
$ dmd demostruct
Error: __result = this is not an lvalue
demostruct.d(12): Error: __result = (this.data[n]) is not an lvalue
demostruct.d(18): Error: __result = (this.data[n]) is not an lvalue
demostruct.d(29): template instance demostruct.S!(double) error instantiating

Reply via email to