error: `T` does not live long enough

このエラーは『E0597 - HRTB の機能制限』と似ている。エラーメッセージにエラー番号や詳細が含まれないなど、細かな違いこそあるが、周辺事情は共通していると予想される。そのため、概要についてはそちらを参照されたい。

発生条件

基本は E0597 と同じである。ただし、本エラーではライフタイム境界に違反しているのは、具体的な型ではなく型パラメタである。そのため、型パラメタに新たな境界を追加すると修正できる場合がある。

サンプル

以下では、関数 with_tT: '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);
  |     ^^^^^^^^^^^^

派生パターン