// edition:2021 // run-pass // Test disjoint capture within an impl block struct Filter { div: i32, } impl Filter { fn allowed(&self, x: i32) -> bool { x % self.div == 1 } } struct Data { filter: Filter, list: Vec, } impl Data { fn update(&mut self) { // The closure passed to filter only captures self.filter, // therefore mutating self.list is allowed. self.list.retain( |v| self.filter.allowed(*v), ); } } fn main() { let mut d = Data { filter: Filter { div: 3 }, list: Vec::new() }; for i in 1..10 { d.list.push(i); } d.update(); }