On Monday, 22 April 2019 at 08:02:06 UTC, Arun Chandrasekaran
wrote:
What am I doing wrong here?
struct A
{
union B
{
int bb;
}
B b;
alias aa = B.bb;
}
void main()
{
A a = A();
// a.b.bb = 4; // works
a.aa = 4; // fails
}
https://run.dlang.io/is/kXaVy2
You can get the behaviour you want with opDispatch, and
generalize it with a mixin template:
mixin template AliasMember(string aliasName, string memberName) {
ref opDispatch(string name)() if (name == aliasName) {
return mixin(memberName);
}
}
struct A {
union B {
int bb;
}
B b;
mixin AliasMember!("aa", "b.bb");
}
void main() {
A a = A();
a.aa = 4;
}