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.
77 lines
2.7 KiB
Plaintext
77 lines
2.7 KiB
Plaintext
error[E0277]: cannot add `u32` to `i32`
|
|
--> $DIR/ufcs-qpath-self-mismatch.rs:4:31
|
|
|
|
|
LL | <i32 as Add<u32>>::add(1, 2);
|
|
| ---------------------- ^ no implementation for `i32 + u32`
|
|
| |
|
|
| required by a bound introduced by this call
|
|
|
|
|
= help: the trait `Add<u32>` is not implemented for `i32`
|
|
= help: the following other types implement trait `Add<Rhs>`:
|
|
<&'a i32 as Add<i32>>
|
|
<&i32 as Add<&i32>>
|
|
<i32 as Add<&i32>>
|
|
<i32 as Add>
|
|
|
|
error[E0308]: mismatched types
|
|
--> $DIR/ufcs-qpath-self-mismatch.rs:7:28
|
|
|
|
|
LL | <i32 as Add<i32>>::add(1u32, 2);
|
|
| ---------------------- ^^^^ expected `i32`, found `u32`
|
|
| |
|
|
| arguments to this function are incorrect
|
|
|
|
|
help: the return type of this call is `u32` due to the type of the argument passed
|
|
--> $DIR/ufcs-qpath-self-mismatch.rs:7:5
|
|
|
|
|
LL | <i32 as Add<i32>>::add(1u32, 2);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^----^^^^
|
|
| |
|
|
| this argument influences the return type of `Add`
|
|
note: associated function defined here
|
|
--> $SRC_DIR/core/src/ops/arith.rs:LL:COL
|
|
help: change the type of the numeric literal from `u32` to `i32`
|
|
|
|
|
LL | <i32 as Add<i32>>::add(1i32, 2);
|
|
| ~~~
|
|
|
|
error[E0308]: mismatched types
|
|
--> $DIR/ufcs-qpath-self-mismatch.rs:9:31
|
|
|
|
|
LL | <i32 as Add<i32>>::add(1, 2u32);
|
|
| ---------------------- ^^^^ expected `i32`, found `u32`
|
|
| |
|
|
| arguments to this function are incorrect
|
|
|
|
|
help: the return type of this call is `u32` due to the type of the argument passed
|
|
--> $DIR/ufcs-qpath-self-mismatch.rs:9:5
|
|
|
|
|
LL | <i32 as Add<i32>>::add(1, 2u32);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^----^
|
|
| |
|
|
| this argument influences the return type of `Add`
|
|
note: associated function defined here
|
|
--> $SRC_DIR/core/src/ops/arith.rs:LL:COL
|
|
help: change the type of the numeric literal from `u32` to `i32`
|
|
|
|
|
LL | <i32 as Add<i32>>::add(1, 2i32);
|
|
| ~~~
|
|
|
|
error[E0277]: cannot add `u32` to `i32`
|
|
--> $DIR/ufcs-qpath-self-mismatch.rs:4:5
|
|
|
|
|
LL | <i32 as Add<u32>>::add(1, 2);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^ no implementation for `i32 + u32`
|
|
|
|
|
= help: the trait `Add<u32>` is not implemented for `i32`
|
|
= help: the following other types implement trait `Add<Rhs>`:
|
|
<&'a i32 as Add<i32>>
|
|
<&i32 as Add<&i32>>
|
|
<i32 as Add<&i32>>
|
|
<i32 as Add>
|
|
|
|
error: aborting due to 4 previous errors
|
|
|
|
Some errors have detailed explanations: E0277, E0308.
|
|
For more information about an error, try `rustc --explain E0277`.
|