Solution (source code)

= Solution

Hypothetical covariance would allow the following unsound alias:

``
val narrow: MSet[Int] = new MSet[Int](Nil)
val wide: MSet[Any] = narrow       // hypothetical covariant conversion
wide.add("not an integer")
val n: Int = narrow.delete()      // would return the inserted string
``

The last value cannot satisfy its promised type. This is the <covariance failure for a mutable collection>: a broader consuming interface could insert values that violate a narrower alias's guarantee. The actual invariant `MSet[T]` rejects the conversion, and declaring `+T` while retaining `add(x: T)` is itself rejected by the <variance-position rule>. \b[The mutable read-and-write interface must remain invariant in `T`.]