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

Reply via email to