1 2 3 4 5 6 7 8 9 10 11 12
object Test { trait S { type T; val x: AnyRef } trait A extends S { type T <: A; val x: A = null } trait B extends S { type T <: B; val x: B = null } val a = new A{} val b = new B{} val y = if (true) a else b // lub of y should allow for this println(y.x.x) }