On Wed, 05 Oct 2011 19:19:37 -0400, bearophile <bearophileh...@lycos.com>
wrote:
Do you know why this program doesn't compile (with DMD 2.056head)?
immutable(int[]) foo(in int[] x) pure {
return new int[1];
}
void main() {}
It gives:
test.d(2): Error: cannot implicitly convert expression (new int[](1u))
of type int[] to immutable(int[])
This program instead compiles (now x is int[2] instead of int[]):
immutable(int[]) foo(in int[2] x) pure {
return new int[1];
}
void main() {}
I think it's a bug.
new should be considered pure, and since it's return value cannot be a
reference to any parameter, it should implicitly cast to immutable.
The fact that changing the parameter to foo makes it compile is a big clue.
Note, this should compile even if foo isn't pure, since new is pure (no
matter what type of function it is in).
-Steve