struct Guard<'a> { f: Box, } fn scoped<'a, F: Fn() + Send + 'a>(f: F) -> Guard<'a> { Guard { f: Box::new(f) } } impl<'a> Guard<'a> { fn join(self) {} } fn main() { let bad = { let x = 1; let y = &x; //~^ ERROR `x` does not live long enough scoped(|| { let _z = y; //~^ ERROR `y` does not live long enough }) }; bad.join(); }