On Tuesday, 16 February 2016 at 10:32:45 UTC, Timon Gehr wrote:
struct S{
int[] a;
void foo()headconst{
a[0]=1; // ok
// arr.length=2 // error
}
}
void main(){
headconst(S) s([0,2,3]);
s.foo();
assert(s.a==[1,2,3]);
}
How to do this in the library?
Maybe make foo a free function:
struct S{
int[] a;
}
void foo(HConst!S self){
self.a[0]=1; // ok
self.arr.length=2 // no effect
}
Haven't tried, but maybe HConst can allow access to fields of S
by value, not ref. That could prevent mutation like C++ const,
but it wouldn't disallow mutation of the temporary copy. Not sure
if that's good enough. I suppose the compiler could warn about
unused temporary mutation.