immutable array in constructor

Jeff Thompson via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Mar 17 03:11:43 PDT 2016


On Thursday, 17 March 2016 at 10:04:53 UTC, Anonymouse wrote:
> On Thursday, 17 March 2016 at 09:57:37 UTC, Jeff Thompson wrote:
>> In the following code, I explicitly declare array as 
>> immutable. But it compiles with the error shown below in the 
>> comment. The array object is declared immutable, so how can 
>> the compiler say it is a mutable object? In summary, how to 
>> pass an immutable array to an immutable constructor?
>>
>> class C {
>>   int i;
>>   this(immutable int[] array) immutable {
>>     i = array[0];
>>   }
>> }
>>
>> void func() {
>>   immutable int[] array = [1];
>>   auto c = new C(array); // Error: immutable method C.this is 
>> not callable using a mutable object
>> }
>
> The error message isn't very good, but remove immutable from 
> the constructor and it works.
>>   this(immutable int[] array) {

This is a simplified example from a larger class I have where I 
need an immutable constructor. This is because I need to 
construct an object an pass it to other functions which take an 
immutable object. So, how to keep an immutable constructor?


More information about the Digitalmars-d-learn mailing list