Invariance elsewhere

While behind a &mut is the most common place to first encounter invariance, it's present elsewhere as well.

Cell<T> and RefCell<T> are also invariant in T.

Trait parameters are invariant too. As a result, lifetime-parameterized traits can be onerous to work with.

Additionally, if you have a bound like T: Trait<U>, U becomes invariant because it's a type parameter of the trait. If your U resolves to &'x V, the lifetime 'x will be invariant too.