On 01/31/2013 05:48 AM, estew wrote:
void main() {
      float[3] v1 = [1.0, 2.0, 3.0];    // No error
      float[3] v = [1.0, 2.0, 3.0].dup; // Fails at runtime with error message
}
...

It fails at compile time?

The reason is that array literals have special conversion rules:

Eg:

bool[] x = [0,1,0,1,0,1,1];

An array literal is converted element-wise. This means an array literal sometimes behaves differently from other expressions of the same type:

import std.stdio;

void main() {
        int[] a = [0,2,0,1];
        bool[] x = cast(bool[])[0,2,0,1];
        bool[] y = cast(bool[])a;
        writeln(x,"\n",y);
}

[false, true, false, true]
[false, false, false, false, true, false, false, false, false, false, false, false, true, false, false, false]

Reply via email to