fn save_ref<'a>(refr: &'a i32, to: &mut [&'a i32]) { for val in &mut *to { *val = refr; } } fn main() { let ref init = 0i32; let ref mut refr = 1i32; let mut out = [init]; save_ref(&*refr, &mut out); // This shouldn't be allowed as `refr` is borrowed *refr = 3; //~ ERROR cannot assign to `*refr` because it is borrowed // Prints 3?! println!("{:?}", out[0]); }