how to initialize immutable 2 dim array

Stewart Gordon smjg_1998 at
Sun Oct 31 10:46:29 PDT 2010

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.


More information about the Digitalmars-d-learn mailing list