On Sunday, 5 July 2015 at 15:39:50 UTC, Artem Tarasov wrote:
On Sunday, 5 July 2015 at 14:44:30 UTC, John Colvin wrote:
struct A
{
ubyte[B.sizeof] mem;
@property ref B b()
{
return *cast(B*)(mem.ptr);
}
mixin std.typecons.Proxy!b;
}
Thanks, I followed your suggestion and effectively rolled out
my own union implementation. Ugly but it works.
struct A
{
ubyte[maxSizeof] _data;
@property ref T _as(T)() inout { return
*cast(T*)(_data.ptr); }
alias b = _as!uint;
alias c = _as!size_t;
alias d = _as!double;
}
That works, but what I meant was, using my definition of struct
A, you can put it in a union without the compiler complaining,
and the invariants still get called. No need to write your own
union implementation.