struct Archive; struct ArchiveIterator<'a> { x: &'a Archive, } struct ArchiveChild<'a> { x: &'a Archive, } struct A { raw: &'static mut Archive, } struct Iter<'a> { raw: &'a mut ArchiveIterator<'a>, } struct C<'a> { raw: &'a mut ArchiveChild<'a>, } impl A { pub fn iter(&self) -> Iter<'_> { panic!() } } impl Drop for A { fn drop(&mut self) {} } impl<'a> Drop for C<'a> { fn drop(&mut self) {} } impl<'a> Iterator for Iter<'a> { type Item = C<'a>; fn next(&mut self) -> Option> { panic!() } } fn error(archive: &A) { let mut members: Vec<&mut ArchiveChild<'_>> = vec![]; for child in archive.iter() { members.push(child.raw); //~^ ERROR borrow may still be in use when destructor runs [E0713] } members.len(); } fn main() {}