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