#[derive(Copy, Clone)] struct S; impl S { fn mutate(&mut self) { } } fn func(arg: S) { arg.mutate(); //~ ERROR: cannot borrow `arg` as mutable, as it is not declared as mutable } impl S { fn method(&self, arg: S) { arg.mutate(); //~ ERROR: cannot borrow `arg` as mutable, as it is not declared as mutable } } trait T { fn default(&self, arg: S) { arg.mutate(); //~ ERROR: cannot borrow `arg` as mutable, as it is not declared as mutable } } impl T for S {} fn main() { let s = S; func(s); s.method(s); s.default(s); (|arg: S| { arg.mutate() })(s); //~^ ERROR: cannot borrow `arg` as mutable, as it is not declared as mutable }