Thread overview
About implicit array cast
Jan 13, 2012
bearophile
Jan 13, 2012
Timon Gehr
Jan 13, 2012
bearophile
January 13, 2012
This code compiles, because the [0,0] dynamic array literal casts implicitly to int[2]:


int[2] foo() {
    return [0, 0]; // OK
}
void main() {}


And of course this too compiles:


int[2] bar() {
    int[2] ab;
    return (true) ? ab : ab; // OK
}
void main() {}



But currently this code doesn't compile:


int[2] spam() {
    int[2] ab;
    return (true) ? ab : [0, 0]; // Error
}
void main() {}


test.d(3): Error: cannot implicitly convert expression (cast(int[])ab) of type int[] to int[2u]


Is this good?

Bye,
bearophile
January 13, 2012
On 01/13/2012 02:19 AM, bearophile wrote:
> This code compiles, because the [0,0] dynamic array literal casts implicitly to int[2]:
>
>
> int[2] foo() {
>      return [0, 0]; // OK
> }
> void main() {}
>
>
> And of course this too compiles:
>
>
> int[2] bar() {
>      int[2] ab;
>      return (true) ? ab : ab; // OK
> }
> void main() {}
>
>
>
> But currently this code doesn't compile:
>
>
> int[2] spam() {
>      int[2] ab;
>      return (true) ? ab : [0, 0]; // Error
> }
> void main() {}
>
>
> test.d(3): Error: cannot implicitly convert expression (cast(int[])ab) of type int[] to int[2u]
>
>
> Is this good?
>
> Bye,
> bearophile

This is a bug.
January 13, 2012
Timon Gehr:

> This is a bug.

OK:
http://d.puremagic.com/issues/show_bug.cgi?id=7285

Bye,
bearophile