Show detailed expected/found types in error message when trait paths are the same
This commit is contained in:
parent
ca8078d7b2
commit
7b9ddbdcf2
9 changed files with 87 additions and 20 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
19
src/test/ui/issues/issue-65230.rs
Normal file
19
src/test/ui/issues/issue-65230.rs
Normal 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() {}
|
||||
38
src/test/ui/issues/issue-65230.stderr
Normal file
38
src/test/ui/issues/issue-65230.stderr
Normal 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`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue