...How will the variable `outer` become the reference to the current `X` object (if that makes sense?). Does the compiler do it automatically?
I think you'll need to do this: class X { private int num; struct Y { X outer; int fun() { return outer.num; } } Y y; this(){ y = Y(this); } } void main(){ import std.stdio : writeln; auto x = new X(); x.num = 10; writeln(x.num); writeln(x.y.fun()); } Prints: 10 10 Matheus.