我不明白为什么限制未使用的泛型会导致编译错误.为什么要编译以下代码:
#[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并使用==
进行编译.如果知道为什么会有错误以及这里发生了什么,那将是一件很棒的事情.