a3cf3822d2
When the return type of a function call depends on the type of an argument, e.g. ``` fn foo<T>(x: T) -> T { x } ``` and the expected type is set due to either an explicitly typed binding, or because the call to the function is in a tail position without semicolon, the current error implies that the argument in the call has the wrong type. This new hint highlights that the expected type doesn't match the returned type, which matches the argument type, and that that's why we're flagging the argument type. Fixes #43608.
30 lines
997 B
Plaintext
30 lines
997 B
Plaintext
error[E0308]: mismatched types
|
|
--> $DIR/issue-52893.rs:53:22
|
|
|
|
|
LL | impl<F, Name, P> AddClass<Name, F> for Class<P>
|
|
| - this type parameter
|
|
...
|
|
LL | builder.push(output);
|
|
| ---- ^^^^^^ expected type parameter `F`, found struct `Class`
|
|
| |
|
|
| arguments to this method are incorrect
|
|
|
|
|
= note: expected type parameter `F`
|
|
found struct `Class<P>`
|
|
help: the return type of this call is `Class<P>` due to the type of the argument passed
|
|
--> $DIR/issue-52893.rs:53:9
|
|
|
|
|
LL | builder.push(output);
|
|
| ^^^^^^^^^^^^^------^
|
|
| |
|
|
| this argument influences the return type of `push`
|
|
note: associated function defined here
|
|
--> $DIR/issue-52893.rs:11:8
|
|
|
|
|
LL | fn push(self, other: T) -> Self::PushRes;
|
|
| ^^^^
|
|
|
|
error: aborting due to previous error
|
|
|
|
For more information about this error, try `rustc --explain E0308`.
|