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.