On Sunday, 5 July 2015 at 12:15:32 UTC, Artem Tarasov wrote:
OK, so there was an old bug fixed in 2.067 (https://issues.dlang.org/show_bug.cgi?id=4421) so that now unions apparently can't contain a struct that has invariants. It kinda makes sense, although I don't see why the invariants can be simply ignored, as they don't have as much importance as destructors/postblits.

But more to the point. I have a struct that has an invariant, and I wish to use it as a member of an union. With the latest compiler, I have to somehow remove the invariant. Is there some compile-time magic that I can use for this?

Not perfect, but I think you can do:

struct A
{
    ubyte[B.sizeof] mem;
    @property ref B b()
    {
        return *cast(B*)(mem.ptr);
    }
    mixin std.typecons.Proxy!b;
}

where B has an invariant. Even better, the invariant should still get called.

Reply via email to