#[derive(Debug)] struct X(T); impl Clone for X { fn clone(&self) -> X { X(self.0.clone()) } } #[derive(Debug)] struct Y; #[derive(Debug)] struct Str { x: Option, } fn foo(s: &mut Option) { if s.is_none() { *s = Some(0); } println!("{:?}", s); } fn bar(s: &mut X) { println!("{:?}", s); } fn main() { let s = Str { x: None }; let sr = &s; let mut sm = sr.clone(); foo(&mut sm.x); //~ ERROR cannot borrow `sm.x` as mutable, as it is behind a `&` reference let x = X(Y); let xr = &x; let mut xm = xr.clone(); bar(&mut xm); //~ ERROR cannot borrow data in a `&` reference as mutable }