(In fact, the owned invariant for `Cell<T>` is *exactly the same* as the one for `T`!)
That's precisely what we need for covariance, right?
Well, not exactly -- because our types have two invariants, we also have to require that whenever a pointer is a shared `Cell<T>`, it is a shared `Cell<U>`, and that is decisively *not* true!
(In fact, the owned invariant for `Cell<T>` is *exactly the same* as the one for `T`!)
That's precisely what we need for covariance, right?
Well, not exactly -- because our types have two invariants, we also have to require that whenever a pointer is a shared `Cell<T>`, it is a shared `Cell<U>`, and that is decisively *not* true!