struct Point { x: isize, y: isize, } fn a() { let mut p = vec![1]; // Create an immutable pointer into p's contents: let q: &isize = &p[0]; p[0] = 5; //~ ERROR cannot borrow println!("{}", *q); } fn borrow(_x: &[isize], _f: F) where F: FnOnce() {} fn b() { // here we alias the mutable vector into an imm slice and try to // modify the original: let mut p = vec![1]; borrow( &p, || p[0] = 5); //~ ERROR cannot borrow `p` as mutable } fn c() { // Legal because the scope of the borrow does not include the // modification: let mut p = vec![1]; borrow(&p, ||{}); p[0] = 5; } fn main() { }