Rust 关联类型的生存期绑定被拒绝,尽管它似乎有效

Rust 关联类型的生存期绑定被拒绝,尽管它似乎有效,rust,traits,lifetime,Rust,Traits,Lifetime,我有一段未编译的代码,可以简化为以下代码段: 使用std::error::error; 使用std::convert::TryFrom; //一种特性,提供将数据解析为类型T的方法。 可反序列化的{ //一些方法 } 发布结构MyBuffer 哪里 T:TryFrom>::错误:错误+同步+发送+静态 { //一些实现方法 } fn main(){} 编译器拒绝此程序,并显示令人困惑的错误消息: error[E0310]: the associated type `<T as std::

我有一段未编译的代码,可以简化为以下代码段:

使用std::error::error;
使用std::convert::TryFrom;
//一种特性,提供将数据解析为类型T的方法。
可反序列化的{
//一些方法
}
发布结构MyBuffer
哪里
T:TryFrom>::错误:错误+同步+发送+静态
{
//一些实现方法
}
fn main(){}
编译器拒绝此程序,并显示令人困惑的错误消息:

error[E0310]: the associated type `<T as std::convert::TryFrom<&[u8]>>::Error` may not live long enough
  --> src/main.rs:13:13
   |
13 | impl<'a, T> Deserializable<T> for MyBuffer<'a> 
   |             ^^^^^^^^^^^^^^^^^
   |
   = help: consider adding an explicit lifetime bound `<T as std::convert::TryFrom<&[u8]>>::Error: 'static`...
note: ...so that the type `<T as std::convert::TryFrom<&[u8]>>::Error` will meet its required lifetime bounds
  --> src/main.rs:13:13
   |
13 | impl<'a, T> Deserializable<T> for MyBuffer<'a> 
   |             ^^^^^^^^^^^^^^^^^
有人能解释为什么这个程序不能编译,和/或如何修复它(如果可能的话)?在我看来,应该可以有
我仍然不知道为什么,但似乎只是删除了“错误上的静态界限有效吗?”


这似乎是编译器对生命周期和相关类型进行推理的能力上的一个缺口

有时,为了帮助编译器,可以将泛型参数添加到关联类型的别名中。此参数不“计数”,因为它不会使项“更通用”,但由于泛型是在使用时解析的,而不是在声明时解析的,因此它将延迟类型检查的困难部分,直到知道确切的类型为止。换句话说:编译器可能能够证明任何特定的
T::Error
都有效,但它不能完全证明每个
T::Error
都必须有效,因此,我们引入了一个新的参数
E
,它必然是
T::Error
,并告诉编译器只有在我们尝试使用它时才知道
E
是什么

以下工作():

impl
哪里

T:TryFromYes,但我希望将
'静态
绑定,因为它是为
Send+Sync+Error+'静态
实现的。对不起,我应该把问题说得更清楚。
consider adding an explicit lifetime bound `<T as std::convert::TryFrom<&[u8]>>::Error: 'static`
impl<'a, T, E> Deserializable<T> for MyBuffer<'a>
where
    T: TryFrom<&'a [u8], Error = E>,
    E: Error + Sync + Send + 'static,
{
    // ...
}