// check-pass trait Foo { type Assoc<'a> where Self: 'a; fn assoc(&mut self) -> Self::Assoc<'_>; } fn overlapping_mut(mut t: T) where T: Foo, for<'a> T::Assoc<'a>: 'static, { let a = t.assoc(); let b = t.assoc(); } fn live_past_borrow(mut t: T) where T: Foo, for<'a> T::Assoc<'a>: 'static { let x = t.assoc(); drop(t); drop(x); } fn main() {}