On Sun, 03 Jan 2010 04:23:00 +0300, Trass3r <[email protected]> wrote:
http://www.digitalmars.com/d/2.0/expression.html#ArrayLiteral
The code example from the docs yields [1 1] and [1 0 1 0] instead of [1
1] and [257] for dmd 2.037.
Additionally
short[] t = [cast(short) 5, 3];
short[] t2 = [cast(short) 5, 3].dup;
void main()
{ ...
yields:
Error: cannot evaluate _adDupT((& D12TypeInfo_G2i6__initZ),[5,3]) at
compile-time
Error: cannot implicitly convert expression (_adDupT((&
D12TypeInfo_G2i6__initZ),[5,3])) of type int[] to short[]
Error: cannot evaluate _adDupT((& D12TypeInfo_G2i6__initZ),[5,3]) at
compile-time
Using int instead of short only removes the second message.
Compiler bug(s)?
Yes and no. It used to work (and should still work), but the behavior was
changed to take all array literal values into consideration.
"Proper" code should look like this:
short[] t = [cast(short) 5, cast(short)3];
which is err... I'll let someone else to decide. Just imagine there are
ten (or more) values in an array literal.