Reduced: --- struct SignalImpl { @disable this(this); } struct RestrictedSignal { SignalImpl mImpl; void connect() { } } struct Signal { RestrictedSignal mRestricted; } class MyObject { Signal valueChangedSg; ref RestrictedSignal valueChanged() { return valueChangedSg.mRestricted; } } int main () { MyObject a = new MyObject; a.valueChanged().connect(); return 0; }