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?