On 31/10/2010 17:10, Michal Minich wrote:
I have global static array and I want it to initialize in module
constructor, but I get error. I there way to do it without using enum.

So you want to initialise it with data acquired at runtime, but make it immutable once initialised?

immutable int[5][5] arr;

static this () {
    arr = new int[5][5]; // Error: slice arr[] is not mutable
}

You have a more fundamental problem here. arr is a static array, so you can't reference-assign it.

Best you can do is to either:

- initialise it statically, using CTFE or template metaprogramming to do the calculations, if they don't depend on getting external data

- use a dynamic array instead, and use .idup to populate it

- create a mutable pointer to it in the module constructor
    int[5][5]* marr = cast(int[5][5]*) arr;
and use that to populate the array. But I'm not sure whether this leads to UB, and I still wish the means of casting away const or immutable were explicit.

Stewart.

Reply via email to