This code doesn't compile:
fn f<F: FnMut()>(mut x: F) {
x();
}
fn main() {
let mut x = vec![1];
let mut y = || x[0] = 2;
let z = & y;
f(z);
}
However, the following code does compile:
fn f<F: FnMut()>(mut x: F) {
x();
}
fn main() {
let mut x = vec![1];
let mut y = || x[0] = 2;
let z = &mut y;
f(z);
}
Why? One potential explanation is that std::ops
has
impl<'a,A,F:?Sized> FnMut<A> for &'a mut F where F : FnMut<A>
but not
impl<'a,A,F:?Sized> FnMut<A> for &'a F where F : FnMut<A>
Is that an omission?