fn main() { { let mut _thing1 = D(Box::new("thing1")); // D("other").next(&_thing1).end() D(&_thing1).end() //~ ERROR does not live long enough } ; } #[derive(Debug)] struct D(T); impl Drop for D { fn drop(&mut self) { println!("dropping {:?})", self); } } impl D { fn next(&self, _other: U) -> D { D(_other) } fn end(&self) { } }