-trait T {
- type U;
- fn f(&self) -> Self::U;
-}
+trait T0 {}
+trait T1: T0 {}
-struct X<'a>(&'a mut i32);
+trait T2 {}
-impl<'a> T for X<'a> {
- type U = &'a i32;
- fn f(&self) -> Self::U {
- self.0
- }
- //~^^^ ERROR cannot infer an appropriate lifetime for lifetime parameter `'a`
- //
- // Return type of `f` has lifetime `'a` but it tries to return `self.0` which
- // has lifetime `'_`.
-}
+impl<'a> T0 for &'a (dyn T2 + 'static) {}
+
+impl T1 for &dyn T2 {}
+//~^ ERROR mismatched types
fn main() {}
-error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'a` due to conflicting requirements
- --> $DIR/issue-65230.rs:10:28
- |
-LL | fn f(&self) -> Self::U {
- | ____________________________^
-LL | | self.0
-LL | | }
- | |_____^
- |
-note: first, the lifetime cannot outlive the anonymous lifetime defined on the method body at 10:10...
- --> $DIR/issue-65230.rs:10:10
- |
-LL | fn f(&self) -> Self::U {
- | ^^^^^
-note: ...so that reference does not outlive borrowed content
- --> $DIR/issue-65230.rs:11:9
- |
-LL | self.0
- | ^^^^^^
-note: but, the lifetime must be valid for the lifetime `'a` as defined on the impl at 8:6...
+error[E0308]: mismatched types
--> $DIR/issue-65230.rs:8:6
|
-LL | impl<'a> T for X<'a> {
- | ^^
-note: ...so that the types are compatible
- --> $DIR/issue-65230.rs:10:28
+LL | impl T1 for &dyn T2 {}
+ | ^^ lifetime mismatch
+ |
+ = note: expected trait `<&dyn T2 as T0>`
+ found trait `<&(dyn T2 + 'static) as T0>`
+note: the lifetime `'_` as defined on the impl at 8:13...
+ --> $DIR/issue-65230.rs:8:13
|
-LL | fn f(&self) -> Self::U {
- | ____________________________^
-LL | | self.0
-LL | | }
- | |_____^
- = note: expected `<X<'a> as T>`
- found `<X<'_> as T>`
+LL | impl T1 for &dyn T2 {}
+ | ^
+ = note: ...does not necessarily outlive the static lifetime
error: aborting due to previous error
-For more information about this error, try `rustc --explain E0495`.
+For more information about this error, try `rustc --explain E0308`.