这是一种情况,你做错了什么,以至于编译器非常困惑,建议你做一些对解决根本问题没有帮助的事情。
您可以通过(否则不必要的终身GAT)消除此错误,这样编译器就可以揭示真正的问题:
V
在中不受约束
MemoryView for T
实施因为
五、
不受约束,编译器无法真正看到它与其他生存期之间的关系,从而推断出合适的生存期
五、
…即使你能解决这个问题,你也不能有一个不受约束的泛型类型参数
无论如何
所以这是一个没有意义的问题。
解决方案是删除
五、
参数。你在这里使用它的唯一原因是你可以要求
T::Target
机具
MemoryView
--所以只需添加该绑定,然后进行调整
type T
在相应的实施中:
impl<T> MemoryView for T
where
T: MyDeref,
<T as MyDeref>::Target: MemoryView,
{
type T = <<T as MyDeref>::Target as MemoryView>::T;
fn at_ref<'a>(&'a self) -> &'a Self::T {
self.deref().at_ref()
}
}
(
Playground
)