我不明白为什么限制未使用的泛型会导致编译错误。为什么会这样编译:
#[derive(PartialEq)]
struct B;
fn is_eq<T>(b: B, c: B) -> bool
// where
// B: PartialEq<T>,
{
b == c
}
但取消注释 where 子句会导致此编译错误:
error[E0308]: mismatched types
--> src/lib.rs:9:10
|
4 | fn is_eq<T>(b: B, c: B) -> bool
| - this type parameter
...
8 | b == c
| ^ expected type parameter `T`, found `B`
|
= note: expected type parameter `T`
found struct `B`
进行==
显式编译,即PartialEq::<B>::eq(&b, &c)
- 尽管编译器不应该清楚地使用此实现吗?奇怪的是,将输入参数更改为 &B 并使用==
编译。很高兴知道为什么会出现错误以及这里发生了什么。