-error[E0308]: mismatched types
+error: lifetime may not live long enough
--> $DIR/match-ref-mut-let-invariance.rs:11:9
|
-LL | x //~ ERROR mismatched types
- | ^ lifetime mismatch
- |
- = note: expected type `&'a mut &'a i32`
- found type `&'a mut &'b i32`
-note: the lifetime 'a as defined on the method body at 9:12...
- --> $DIR/match-ref-mut-let-invariance.rs:9:12
- |
+LL | impl<'b> S<'b> {
+ | -- lifetime `'b` defined here
LL | fn bar<'a>(&'a mut self) -> &'a mut &'a i32 {
- | ^^
-note: ...does not necessarily outlive the lifetime 'b as defined on the impl at 8:6
- --> $DIR/match-ref-mut-let-invariance.rs:8:6
+ | -- lifetime `'a` defined here
+LL | let ref mut x = self.0;
+LL | x
+ | ^ associated function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
|
-LL | impl<'b> S<'b> {
- | ^^
+ = help: consider adding the following bound: `'a: 'b`
+ = note: requirement occurs because of a mutable reference to `&i32`
+ = note: mutable references are invariant over their type parameter
+ = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
error: aborting due to previous error
-For more information about this error, try `rustc --explain E0308`.