struct Direct<'a> { f: &'a isize } struct Indirect1 { // Here the lifetime parameter of direct is bound by the fn() g: Box } struct Indirect2<'a> { // But here it is set to 'a g: Box) + 'static> } fn take_direct<'a,'b>(p: Direct<'a>) -> Direct<'b> { p } //~^ ERROR lifetime may not live long enough fn take_indirect1(p: Indirect1) -> Indirect1 { p } fn take_indirect2<'a,'b>(p: Indirect2<'a>) -> Indirect2<'b> { p } //~^ ERROR lifetime may not live long enough //~| ERROR lifetime may not live long enough fn main() {}