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;
}

Reply via email to