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.

Reply via email to