Trass3r: > > What's wrong with just (D2 code): > > short[] a3 = [5, 3]; > Nothing, but it's just the stripped down example.
I was not answering you, but what Denis Koroskin has written. This thread is getting too much confused. And I think I have already seen a very similar thread elsewhere. > auto t = [0xFF, 0x00]; > yields int[] That's the correct thing. Ints are the default because D2 doesn't defaults to optimized multi-precision integral values as CLisp. > Yet this doesn't work: > http://codepad.org/P9EZ0dIB module main; import std.stdio, std.string; struct RGBA { ubyte r; ubyte g; ubyte b; ubyte a; string toString() { return format("{%s, %s, %s, %s}", r, g, b, a); } } static f = cast(RGBA[]) cast(ubyte[])[0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70]; static g = cast(RGBA[]) cast(ubyte[])[0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70].dup; enum h = cast(ubyte[])[0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70].dup; static h2 = cast(RGBA[]) h.dup; enum h3 = cast(RGBA[]) h; void main() { writeln(f); writeln(h2); writeln(h3); } I don't like that code. So, do you want to define an array of 4-bytes structs? What's wrong with: // qualified imports import std.stdio: writeln; import std.string: format; struct RGBA { ubyte r, g, b, a; string toString() { return format("{%s, %s, %s, %s}", r, g, b, a); } } // alternative 1: enum RGBA[] data1 = [{0x00, 0x10, 0x20, 0x30}, {0x40, 0x50, 0x60, 0x70}]; // alternative 2: enum RGBA[] data2 = [RGBA(0x00, 0x10, 0x20, 0x30), RGBA(0x40, 0x50, 0x60, 0x70)]; void main() { writeln(data1); writeln(data2); } Bye, bearophile
