Não entendo por que restringir um genérico não utilizado causa um erro de compilação. Por que isso compila:
#[derive(PartialEq)]
struct B;
fn is_eq<T>(b: B, c: B) -> bool
// where
// B: PartialEq<T>,
{
b == c
}
mas remover o comentário da cláusula where causa este erro de compilação:
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`
Fazendo as ==
compilações explícitas, ou seja PartialEq::<B>::eq(&b, &c)
- embora não deveria estar claro para o compilador usar esta implementação? Estranhamente, alterando os parâmetros de entrada para &B e usando ==
compilações. Seria ótimo saber por que há um erro e o que está acontecendo aqui.