Copying to an immutable array in a costructor

Maxim Fomin maxim at maxim-fomin.ru
Thu Oct 24 04:40:44 PDT 2013


On Thursday, 24 October 2013 at 07:02:25 UTC, bearophile wrote:
> This shows a limitation of the D type system:
>
>
> import std.algorithm: copy;
> immutable int[2] data;
> static this() {
>     foreach (i, x; [10, 20]) data[i] = x; // OK
>     data[] = [10, 20]; // OK
>     [10, 20].copy(data[]); // Error.
> }
> void main() {}
>
>
> Bye,
> bearophile

Because control flow check for immutable data is almost absent. I 
don't know any situation where are such checks (except 
constructors).

There is similar issue with respect to initializsing immutable 
member field in struct constructor. There is issue in bugzilla 
filed for it (it looks like it will be fixed), where Andrei 
proposed a concept of cooked object, basically implying control 
flow for initializaing immutable members. I think that the code 
you posted as an additional case for the issue.


More information about the Digitalmars-d-learn mailing list