Here is an example:
sealed trait Type
object Type {
case object Type1 extends Type
case object Type2 extends Type
}
sealed trait TypedTrait {
type Tpe <: Type
}
object TypedTrait {
type Aux[T <: Type] = TypedTrait{ type Tpe = T }
}
sealed trait Test {
//Bounded with TypedTrait.Aux[Type.Type1.type]
type TptTrait <: TypedTrait.Aux[Type.Type1.type]
}
object Test {
//No TypedTrait.Aux[Type.Type1.type] type bound
type Aux[T <: TypedTrait] = Test { type TptTrait = T } //compiles fine, but I expected error
}
The example compiles for both Scala 2 and Scala 3, but it does not seem to make sense. Why does it compile?