В этот код , почему время жизни A
должно быть больше, чем 'a
для Box<Fn<A, Output = ()> + 'a>
?
#![feature(unboxed_closures)]
trait Tt {}
struct S<'a, A: Copy + 'a> {
x: Box<Fn<A, Output = ()> + 'a>,
}
fn add<'a, A: Copy + 'a>(x: Box<Fn<A, Output = ()> + 'a>) -> Box<dyn Tt + 'a> {
Box::new(S::<'a, A> { x })
}
impl<'a, A: Copy + 'a> Tt for S<'a, A> {}
A
- список аргументов Fn<A, Output = ()>
.Почему время жизни A
не является продолжительностью звонка Fn<A, Output = ()>
, а вместо длиннее Fn<A, Output = ()>
?
ОБНОВЛЕНИЕ 1
Если A
не указано, если время жизни явно больше 'a
, компилятор выдаст ошибку the parameter type `A` may not live long enough
.
#![feature(unboxed_closures)]
trait Tt {}
struct S<'a, A: Copy> {
x: Box<Fn<A, Output = ()> + 'a>,
}
fn add<'a, A: Copy>(x: Box<Fn<A, Output = ()> + 'a>) -> Box<dyn Tt + 'a> {
Box::new(S::<'a, A> { x })
}
impl<'a, A: Copy> Tt for S<'a, A> {}
A
- это список аргументов Fn<A, Output = ()>
, который должен быть активен с начала до конца вызова Fn<A, Output = ()>
. Я думаю, что время жизни A
не должно зависеть от времени жизни Fn<A, Output = ()>
.Но для компилятора требуется, чтобы время жизни A
было больше, чем Fn<A, Output = ()>
, то есть 'a
.Почему?