Ugly code for anonymous union inside struct
Temtaime opened this issue · 3 comments
struct B
{
union
{
int a;
char c;
};
};
Produces:
extern (C)
{
struct B
{
static union _Anonymous_0
{
int a;
char c;
}
_Anonymous_0 _anonymous_1;
ref auto a() @property @nogc pure nothrow
{
return _anonymous_1.a;
}
void a(_T_)(auto ref _T_ val) @property @nogc pure nothrow
{
_anonymous_1.a = val;
}
ref auto c() @property @nogc pure nothrow
{
return _anonymous_1.c;
}
void c(_T_)(auto ref _T_ val) @property @nogc pure nothrow
{
_anonymous_1.c = val;
}
}
}
I do not see any reasons for those properties. Anonymous unions are allowed in D.
I just copied the definition into a D file and it compiled fine. I don't remember/know why it was done this way, but given the way I work (TDD) I doubt it was for no reason but who knows. Maybe there was a reason and there isn't anymore.
In any case, the translations aren't really meant to be read - and while this is apparently unneeded, it also doesn't cause any problems. If you feel like tackling it, then PRs welcome.
There are problems.
B b;
int* a = &b.a;
Error: cannot implicitly convert expression &b.a
of type extern (C) int delegate() pure nothrow @nogc @property ref @safe
to int*
There are problems.
I would have led with that instead of "ugly code" ;)
Adding a test now.