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

Reply via email to