Boom, that last few were the issues. I elected to just move the return for the setter onto a separate line, mostly because the idea of auto returning different types seem foreign to me... I have used auto plenty in C++11, but never like that and it just throws me off. But fixing those other mistakes we get:

class Vector(int N, T) if (N <= 3) {
    T[N] data;

    this()
    {
        data[] = 0;
    }

@property ref T opDispatch(string fieldName, Args ...)(Args args) if (Args.length < 2 && fieldName.length == 1 && fieldName[0] - 'x' < N)
    {
            int offset = fieldName[0] - 'x';
            static if (args.length == 0)
            {
                return data[offset];
        }
            else
            {
                data[offset] = args[0];
                return data[offset];
        }
    }
}

void main()
{
        Vector!(2, float) t = new Vector!(2,float)();
        writeln(t.x);
        t.x = 4;
        writeln(t.x);
}

That works as intended, now if only it were useful.

Reply via email to