Это компилируется:
import scala.collection._
trait Foo[A, +This <: SortedSet[A] with SortedSetLike[A,This]]
extends SortedSetLike[A, This] { this: This =>
def bar: This = (this: SortedSetLike[A,This]).empty
}
Но если удаленный файл удаляется, он не скомпилируется:
import scala.collection._
trait Foo[A, +This <: SortedSet[A] with SortedSetLike[A,This]]
extends SortedSetLike[A, This] { this: This =>
def bar: This = this.empty
}
Почему? Из предложения extends
мы знаем, что Foo
- это SortedSetLike[A, This]
, поэтому, конечно, upcast действительно - но разве это не показывает, что компилятор разрешил конфликтующее наследование?