// edition:2021 // run-pass // Test whether if we can do precise capture when using nested clsoure. struct Point { x: i32, y: i32, } fn main() { let mut p = Point { x: 5, y: 20 }; // c1 should capture `p.x` via immutable borrow and // `p.y` via mutable borrow. let mut c1 = || { println!("{}", p.x); let incr = 10; let mut c2 = || p.y += incr; c2(); println!("{}", p.y); }; c1(); // This should not throw an error because `p.x` is borrowed via Immutable borrow, // and multiple immutable borrow of the same place are allowed. let px = &p.x; println!("{}", px); c1(); }