On Thursday, 24 October 2019 at 14:08:36 UTC, 9898287 wrote:
On Thursday, 24 October 2019 at 13:50:54 UTC, Paul Backus wrote:
Use a cast:
ulong m = *cast(ulong*) bytes.ptr;
Does this contain any undefined behavior? It is in C as far as
I knew.
The equivalent code in C would use a char*, and char is allowed
by the C standard to alias any other type [1], so it would not be
undefined behavior.
The D language standard is less precise about this sort of thing,
so it's hard to say with complete certainty, but the section on
casting [2] doesn't mention anything about undefined behavior or
strict aliasing, so it's probably fine. (It is, however,
forbidden in @safe functions.)
[1] http://port70.net/~nsz/c/c99/n1256.html#6.5p7
[2] https://dlang.org/spec/expression.html#cast_expressions