What is special about an immutable array of class objects, and why can I not .dup ?

James Blachly james.blachly at gmail.com
Mon May 28 13:51:49 UTC 2018


Consider the below:

```
class C
{
     int x;
}

struct S
{
     int x;
}


void main()
{
	immutable C[] c = [ new C(), new C()];
	immutable S[] s = [ S(), S() ];
     immutable int[] i = [ 1, 2 ];

     auto x = c.dup;
     auto y = s.dup;
     auto z = i.dup;

}
```

This fails to compile with a `.dup` template matching error at 
line `auto x = c.dup;`. However, calling `.idup` works just fine. 
The immutable struct array and int array of course `.dup` just 
fine.

I would have guessed that changing the definition of `C[]` to 
`immutable(C)[]` would have also helped, but it did not.

Why are the class objects special in this case, and why does 
`immutable(C)[]` not help?   I believed that this defined a 
dynamic array `c` which was itself mutable, the elements of which 
were immutable.

Thanks for insights.




More information about the Digitalmars-d-learn mailing list