R
Size: a a a
R
p
R
Foo<'a> живут ровно 'a или не больше 'a?R
fn dropfoo<'a>(foo: Foo<'a>, bar: Bar<'a>) -> Bar<'a> {
drop(foo);
bar
}
{
let bar = {
let foo = Foo::new();
let bar = Bar::new();
dropfoo(foo, bar)
};
}R
R
fn foo<'a>(r: &'a i32) {
let _ = Foo::<'a>::new(r);
}
Созданный Foo живет точно меньше чем ссылка, потому что она снаружи пришлаR
&'a T жил ровно 'a то я бы всегда мог создать из него &'a &'a TR
R
R
p
fn foo<'a>(r: &'a i32) {
let _ = Foo::<'a>::new(r);
}
Созданный Foo живет точно меньше чем ссылка, потому что она снаружи пришлаR
Foo<'a> - нетR
Foo<'a> живет ровно 'aNM
NM