auto + Top-level Const/Immutable
dsimcha
dsimcha at yahoo.com
Tue Dec 20 06:23:31 PST 2011
The changes made to IFTI in DMD 2.057 are great, but they reveal another
hassle with getting generic code to play nice with const.
import std.range, std.array;
ElementType!R sum(R)(R range) {
if(range.empty) return 0;
auto ans = range.front;
range.popFront();
foreach(elem; range) ans += elem;
return ans;
}
void main() {
const double[] nums = [1, 2, 3];
sum(nums);
}
test.d(8): Error: variable test9.sum!(const(double)[]).sum.ans cannot
modify const
test.d(14): Error: template instance test9.sum!(const(double)[]) error
instantiating
Of course this is fixable with an Unqual, but it requires the programmer
to remember this every time and breaks for structs with indirection.
Should we make `auto` also strip top-level const from primitives and
arrays and, if const(Object)ref gets in, from objects?
More information about the Digitalmars-d
mailing list