struct Foo {} impl Foo { pub fn foo(&mut self) { || bar(&mut self); //~^ ERROR cannot borrow `self` as mutable, as it is not declared as mutable } pub fn baz(&self) { || bar(&mut self); //~^ ERROR cannot borrow `self` as mutable, as it is not declared as mutable //~| ERROR cannot borrow data in a `&` reference as mutable } pub fn qux(mut self) { || bar(&mut self); // OK } pub fn quux(self) { || bar(&mut self); //~^ ERROR cannot borrow `self` as mutable, as it is not declared as mutable } } fn bar(_: &mut Foo) {} fn main() {}