www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Some array casts

reply "bearophile" <bearophileHUGS lycos.com> writes:
Currently this is accepted:

int[2] m = cast(int[2])[1, 2];

But Kenji suggests that the cast from int[] to int[2][1] should 
not be accepted. Do you know why?

Reference:
https://issues.dlang.org/show_bug.cgi?id=7514

Bye and thank you,
bearophile
Jan 21 2015
parent reply "Baz" <bb.temp gmx.com> writes:
On Wednesday, 21 January 2015 at 14:31:15 UTC, bearophile wrote:
 Currently this is accepted:

 int[2] m = cast(int[2])[1, 2];

 But Kenji suggests that the cast from int[] to int[2][1] should 
 not be accepted. Do you know why?

 Reference:
 https://issues.dlang.org/show_bug.cgi?id=7514

 Bye and thank you,
 bearophile
This is because of the .sizeof property, for example: void main(string[] args) { int[3] m = cast(int[3])[1, 2, 3]; writeln(m.sizeof); writeln([1, 2, 3].sizeof); } outputs 12 / 8 Your previous example is corner case, it's 8/8 in both.
Jan 21 2015
next sibling parent "Baz" <bb.temp gmx.com> writes:
On Wednesday, 21 January 2015 at 14:41:48 UTC, Baz wrote:
 On Wednesday, 21 January 2015 at 14:31:15 UTC, bearophile wrote:
 Currently this is accepted:

 int[2] m = cast(int[2])[1, 2];

 But Kenji suggests that the cast from int[] to int[2][1] 
 should not be accepted. Do you know why?

 Reference:
 https://issues.dlang.org/show_bug.cgi?id=7514

 Bye and thank you,
 bearophile
This is because of the .sizeof property, for example: void main(string[] args) { int[3] m = cast(int[3])[1, 2, 3]; writeln(m.sizeof); writeln([1, 2, 3].sizeof); } outputs 12 / 8 Your previous example is corner case, it's 8/8 in both.
with -m32 of course.
Jan 21 2015
prev sibling parent reply "bearophile" <bearophileHUGS lycos.com> writes:
Baz:

     int[3] m = cast(int[3])[1, 2, 3];
     writeln(m.sizeof);
     writeln([1, 2, 3].sizeof);
The sizeof values aren't relevant for D array casts. What matters are the array "contents". Bye, bearophile
Jan 21 2015
parent reply "bearophile" <bearophileHUGS lycos.com> writes:
 The sizeof values aren't relevant for D array casts. What 
 matters are the array "contents".
See: void main() { int[5] m = cast(int[5])[1, 2, 3, 4, 5]; assert(m == [1, 2, 3, 4, 5]); pragma(msg, m.sizeof); // 20u pragma(msg, [1, 2, 3, 4, 5].sizeof); // 8u } Bye, bearophile
Jan 21 2015
parent "Douglas Peterson" <basile.burg gmx.com> writes:
On Wednesday, 21 January 2015 at 18:08:44 UTC, bearophile wrote:
 The sizeof values aren't relevant for D array casts. What 
 matters are the array "contents".
See: void main() { int[5] m = cast(int[5])[1, 2, 3, 4, 5]; assert(m == [1, 2, 3, 4, 5]); pragma(msg, m.sizeof); // 20u pragma(msg, [1, 2, 3, 4, 5].sizeof); // 8u } Bye, bearophile
i'm sorry if I've lead you on a wrong way. My bad.
Jan 21 2015