Clarify parameter and argument compatibility

pull/516/head
Emmanuel Amoah 3 weeks ago committed by GitHub
parent 95fa2429af
commit b646f1a5aa
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -118,7 +118,9 @@ This is a classic use-after-free bug!
Our first instinct might be to blame the `assign` impl, but there's really nothing wrong here. Our first instinct might be to blame the `assign` impl, but there's really nothing wrong here.
It shouldn't be surprising that we might want to assign a `T` into a `T`. It shouldn't be surprising that we might want to assign a `T` into a `T`.
The problem is that we cannot assume `&'static str` can still be downgraded into `&'world str` to satisfy `T`, once it's behind a `&mut` reference. This means that `&mut &'static str` **cannot** be a *subtype* of `&mut &'world str`, even if `'static` is a subtype of `'world`. The problem is that we cannot assume `&'static str` can still be downgraded into `&'world str` to satisfy `T`, once it's behind a `&mut` reference.
This means that `&mut &'static str` **cannot** be a *subtype* of `&mut &'world str`,
even if `'static` is a subtype of `'world`.
Variance is the concept that Rust borrows to define relationships about subtypes through their generic parameters. Variance is the concept that Rust borrows to define relationships about subtypes through their generic parameters.

Loading…
Cancel
Save