trait Base {
trait BaseInner {
val base = 0
}
type Inner <: BaseInner
}
trait T1 extends Base {
trait Inner1 extends BaseInner {
val t1 = 0
}
type Inner <: Inner1
def f1(i: Inner) { i.base + i.t1 }
}
trait T2 extends Base { self: T1 =>
trait Inner2 extends Inner1 {
val t2 = 0
}
type Inner <: Inner2
def f2(i: Inner) { i.base + i.t1 + i.t2 }
}
yields
$$ scala I.scala
/home/mikhail.vorozhtsov/I.scala:22: error: value t2 is not a member of T2.this.Inner
def f2(i: Inner) { i.base + i.t1 + i.t2 }
^
one error found
Strangely type Inner = Inner2 works, but then changing type Inner <: Inner1 to type Inner = Inner1 breaks it again.
Tested on 2.8.1 and 2.9.0.r24471-b20110317020039