我试图理解类型约束是如何与关联类型交互的,我偶然发现了这个我不理解的情况.我已经阅读了泛型impl
中关于无约束类型的RFC,但我看不出这如何符合不允许的内容列表.直觉上,我认为对于实现Baz<T>
的任何类型,这段代码都只会指定Foo
中一个明确的impl
.这是我错了吗,还是编译器不能实现逻辑上的飞跃?如果没有,为什么没有?
trait Foo {
type Bar;
fn foo(&self) -> Self::Bar;
}
trait Baz<T> {
fn foo(&self) -> T;
}
impl<T, TBaz> Foo for TBaz
where
TBaz: Baz<T>
{
type Bar = T;
fn foo(&self) -> Self::Bar {
Baz::<T>::foo(self)
}
}
error[E0207]: the type parameter `T` is not constrained by the impl trait, self type, or predicates
--> src/lib.rs:10:6
|
10 | impl<T, TBaz> Foo for TBaz
| ^ unconstrained type parameter
For more information about this error, try `rustc --explain E0207`.