No se puede inferir una vida útil adecuada para un cierre que devuelve una referencia

Teniendo en cuenta el siguiente código:

fn foo<'a, T: 'a>(t: T) -> Box<Fn() -> &'a T + 'a> {
    Box::new(move || &t)
}

Lo que espero

El tipo T tiene vida útil'a.El valort vivir tanto comoT.t se mueve hacia el cierre, de modo que el cierre viva mientrastEl cierre devuelve una referencia at que fue trasladado al cierre. Por lo tanto, la referencia es válida mientras exista el cierre.No hay problema de por vida, el código se compila.

Lo que realmente sucede:

El código no compila:
error[E0495]: cannot infer an appropriate lifetime for borrow expression due to conflicting requirements
 --> src/lib.rs:2:22
  |
2 |     Box::new(move || &t)
  |                      ^^
  |
note: first, the lifetime cannot outlive the lifetime  as defined on the body at 2:14...
 --> src/lib.rs:2:14
  |
2 |     Box::new(move || &t)
  |              ^^^^^^^^^^
note: ...so that closure can access `t`
 --> src/lib.rs:2:22
  |
2 |     Box::new(move || &t)
  |                      ^^
note: but, the lifetime must be valid for the lifetime 'a as defined on the function body at 1:8...
 --> src/lib.rs:1:8
  |
1 | fn foo<'a, T: 'a>(t: T) -> Box<Fn() -> &'a T + 'a> {
  |        ^^
  = note: ...so that the expression is assignable:
          expected std::boxed::Box<(dyn std::ops::Fn() -> &'a T + 'a)>
             found std::boxed::Box<dyn std::ops::Fn() -> &T>

No entiendo el conflicto. ¿Cómo puedo arreglarlo?

Respuestas a la pregunta(4)

Su respuesta a la pregunta