struct Foo { private SomeOtherStruct payload; public alias payload this;// ... other stuff ... }... the compiler won't accept it, because the private access to payload clashes with public access via alias this.
Did you try using a method? module1 --- struct Subtype { private int x; public int getX() { return x; } alias getX this; } --- module2 --- import module1; void main() { Subtype st = Subtype(2); int x = st; } --- Works for me.