Show detailed expected/found types in error message when trait paths are the same

This commit is contained in:
rhysd 2021-10-08 01:00:15 +09:00
parent ca8078d7b2
commit 7b9ddbdcf2
9 changed files with 87 additions and 20 deletions

View file

@ -19,8 +19,8 @@ note: ...so that the types are compatible
|
LL | fn subscribe(&mut self, t : Box<dyn Subscriber<Input=<Self as Publisher>::Output> + 'a>) {
| ^^^^^^^^^
= note: expected `Publisher<'_>`
found `Publisher<'_>`
= note: expected `<MyStruct<'a> as Publisher<'_>>`
found `<MyStruct<'_> as Publisher<'_>>`
error: aborting due to previous error

View file

@ -0,0 +1,19 @@
trait T {
type U;
fn f(&self) -> Self::U;
}
struct X<'a>(&'a mut i32);
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 `'_`.
}
fn main() {}

View file

@ -0,0 +1,38 @@
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...
--> $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 | fn f(&self) -> Self::U {
| ____________________________^
LL | | self.0
LL | | }
| |_____^
= note: expected `<X<'a> as T>`
found `<X<'_> as T>`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0495`.