error: `T` does not live long enough
このエラーは『E0597 - HRTB の機能制限』と似ている。エラーメッセージにエラー番号や詳細が含まれないなど、細かな違いこそあるが、周辺事情は共通していると予想される。そのため、概要についてはそちらを参照されたい。
基本は E0597 と同じである。ただし、本エラーではライフタイム境界に違反しているのは、具体的な型ではなく型パラメタである。そのため、型パラメタに新たな境界を追加すると修正できる場合がある。
以下では、関数 with_t
に T: 'static
の制約を導入するとエラーが治る。
fn main() {
with_t(&1);
}
fn with_t<T>(x: T) {
with_hrtb(x);
}
fn with_hrtb<T: for<'a> Referable<'a>>(_: T) {
// nop.
}
trait Referable<'a> {}
impl<'a, T: 'a> Referable<'a> for T {}
error: `T` does not live long enough --> src/main.rs:6:5 | 6 | with_hrtb(x); | ^^^^^^^^^^^^