On 6/13/15 6:07 PM, deadalnix wrote:
On Saturday, 13 June 2015 at 11:32:20 UTC, rsw0x wrote:
http://dlang.org/garbage.html

Do not take advantage of alignment of pointers to store bit flags in
the low order bits:
p = cast(void*)(cast(int)p | 1);  // error: undefined behavior

if this restriction is actually imposed - why does
std.bitmanip.tagged{ClassRef,Pointer} even exist?

That seems like an arbitrary limitation. This will create an interior
pointer, which the GC needs to recognize anyway.

The doc need to be updated.

void *x = new int;
ptr += 1;

Is this illegal? If not, then why is the above illegal? If so, thousands of lines of code are in violation -- any kind of serialization library for example.

It's exactly the same thing. We can probably change taggedPointer to do this instead, if it's such a big deal. We can change it to a void pointer, and only cast it to T* when retrieving the real pointer.

But it seems kind of silly to outlaw the obvious implementation. I think we should revert the warning and fix the docs.

-Steve

Reply via email to