trait A { trait B { def foo: A.this.B = new B{} def bar: A#B = foo def baz: A.this.B = bar // type mismatch; found : A#B required: A.this.B }
In short: Yes it is
If you want, you can consider A#B to have an abstract reference to the containing A (and therefore not directly constructable, as for any abstract type), this reference being made concrete in the path-dependent subclasses.
A#B
A