This was discussed a little in D.learn. Is code like this going to compile in 
some future DMD versions, like DMD 2.058? I hit situations like this often in 
my code:



int[] foo1(immutable int[] a) pure {
    return new int[a.length];
}

int[] foo2(in int[] a) pure {
    return new int[a.length];
}

void main() {
    immutable int[] arr1 = [1, 2, 3];
    immutable int[] r1 = foo1(arr1); // OK

    const int[] arr2 = [1, 2, 3];
    immutable int[] r2 = foo2(arr2); // error
}


Currently it gives:
Error: cannot implicitly convert expression (foo2(arr2)) of type int[] to 
immutable(int[])


If code like that can't be accepted in future D/DMD versions, then I think DMD 
should give an error message that explains why the r2 implicitly conversion is 
not acceptable (while the implicitly conversion to r1  is acceptable).

Bye,
bearophile

Reply via email to