I feel this is best explained with a testcase:
This is the error DMD gives:
test.d(21): Error: arryacc(3LU) is not an lvalue
code: #####
class A {
private size_t size = 5;
auto newArrayAccessor(T)() {
T[] a = new T[size];
ref T accessor(size_t i) {
return a[i];
}
return &accessor;
}
}
void main() {
uint[5] arry;
ref uint acc(size_t i) {
return arry[i];
}
acc(3) = 5; // works
auto a = new A;
auto arryacc = a.newArrayAccessor!(uint)();
arryacc(3) = 5; // doesn't work. What gives?
}