Casting pointers
anonymous via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Aug 26 06:13:32 PDT 2015
On Wednesday 26 August 2015 14:14, John Burton wrote:
> This would be undefined behavior in c++ due to aliasing rules on
> pointers. It appears to "work" reliably in D when I try it, but
> that's obviously no guarantee that it's correct or will continue
> to do so.
>
> Is this correct code in D? And if not, what should I do instead
> to cleanly and efficiently extract structured data from a
> sequence of bytes?
>
> import std.stdio;
>
> struct data
> {
> int a;
> int b;
> }
>
> void main()
> {
> byte[] x = [1, 2, 3, 4, 5, 6, 7, 8];
>
> data* ptr = cast(data*)(x);
> printf("%x %x\n", ptr.a, ptr.b);
>
> }
There's an open issue about it:
https://issues.dlang.org/show_bug.cgi?id=10750
I don't know where we stand exactly, but by the looks of it, strict aliasing
has never been added to the spec. So compilers should not assume it.
As David Nadlinger points out: "There is already quite a lot of D code out
there that violates the C-style strict aliasing rules."
I think that code should be fine for now. If it isn't, we have a problem,
because with a silent spec we have no way of knowing what alternatives
should work.
More information about the Digitalmars-d-learn
mailing list