On Friday, 8 November 2013 at 04:38:23 UTC, Ross Hays wrote:
Thank you

No problem. I'm glad we're making progress on it. And don't feel bad about mistakes while learning. They happen. Embrace them because they happen to all of us at first especially when we're juggling learning new syntaxes and tricks and such.


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

@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
                return data[offset] = args[0];
    }
}

Okay, your static if's condition is swapped (args.length should be 0 if you're just returning data[offset]).

Also, when you correct that, you'll run into an issue where it reveals that `data[offset] = args[0]` is not an lvalue (which is required for ref). Either change the return type to "auto" and remove the return for that branch... or, alternatively, you can split the statement into two:

else {
  data[offset] = args[0];
  return data[offset];
}

and `data[offset]` will be an lvalue.

Reply via email to