Для gcc 6 и выше произошло связанное исправление ошибок:
С помощью gcc 5 вы также можете получить такое же предупреждение, не включая iostream
.
Итак, если вы видите аналогичное предупреждение, относящееся к dl-init.c
, и вы используете gcc 5, рассмотрите обновление до более новой версии (gcc> = 6) или попытайтесь скомпилировать с clang.
SportsCar - это не CarLike[String, SportsCar]
, это CarLike[String, SimpleCar[String]]
. Обратите внимание, что SportsCar extends SimpleCar[String]
, но это не помогает, поскольку CarLike
не является ковариантным в C
.
Вы не можете сделать ковариантным CarLike
в C
, так как его метод crash
принимает C
. Вместо этого вы можете передать SimpleCar[String]
в Crasher
(в конце концов, спортивные машины могут разбиться на других машинах, верно?):
val crasher = Crasher[String, SimpleCar[String]](
s => s.tail,
c => c.parts.filter(p => p.length > 0)
)
Или вы можете изменить Crasher
, чтобы получить другой параметр типа :
case class Crasher[T, C <: CarLike[T, C], X <: C](partsDamager: T => T,
carChecker: X => Seq[T]) {
// ...
}
val crasher = Crasher[String, SimpleCar[String], SportsCar](
s => s.tail,
c => c.parts.filter(p => p.length > 0)
)