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