On Tuesday, October 21, 2014 08:02:50 bearophile via Digitalmars-d-learn
wrote:
Currently this code gets rejected:

const int[] a = [1];
void main() pure {
     auto y = a[0];
}


test2.d(3,14): Error: pure function 'D main' cannot access
mutable static data 'a'
test2.d(3,14): Error: pure function 'D main' cannot access
mutable static data 'a'

But is this a good idea? Isn't it better to accept it?

In principle, it should be fine, but because it's using const, it won't work. global or static variables which are directly initialized with values that cannot possibly have mutable references elsewhere in the code are the only case where accessing const variables from outside a pure function like this could work - i.e. the cases where immutable and const are essentially identical (the only real difference being that if the variable is a reference type, if it's immutable, it's also shared, whereas if it's const, it's thread-local). So, I don't think that it's at all surprising that the compiler rejects it. It should probably be made smarter so that it doesn't reject it, but because you can just as easily make the variable immutable, you're not
losing any real functionality in the interim.

- Jonathan M Davis

Reply via email to