On 05/29/2015 12:55 AM, seen wrote:
I don't know why but when using a template union with a static ubyte
array i get bizarre results!
module main;
import std.stdio;
private union ByteConverter(T)
{
ubyte[T.sizeof] bytes;
That's a fixed-length array (aka static array), which has value semantics.
T value;
}
ubyte[] toBytes(T)(T from) if (!is(T == const))
That function returns a slice to a...
{
ByteConverter!T converter;
converter.value = from;
return converter.bytes;
... local static array. :(
Replace the return type with
a) auto
b) ubyte[T.sizeof]
}
T fromBytes(T)(in ubyte[] bytes)
{
ByteConverter!T converter;
converter.bytes = bytes;
return converter.value;
}
void main(string[] args)
{
writeln(fromBytes!uint(toBytes(34u)));// should print 32 but prints
1244564
}
why dose it print 1244564 the array is static size so why is it acting
like bytes is a pointer not a static array?
Now it prints 34. :)
Ali