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