the input is a reference to `self`, so the compiler attempts to assign the
the same lifetime to the input and output.
-Looking specifically at `nested_borrow_mut`,
-we see that there are three object references to keep track of,
-along with their associated lifetimes:
+Looking specifically at `nested_borrow_mut`, we see that there are three object
+references to keep track of, along with their associated lifetimes:
- `self` (which is a `&mut T`)
- `u_ref` (which is a `&mut U`)
- `v_ref` (which is a `&mut V`)
The `borrow_mut()` method implicitly requires that that the input and output
-have the same lifetime bounds. Thus:
+have the same lifetime bounds. Thus the lines:
```rust
let u_ref = self.borrow_mut();
let v_ref = u_ref.borrow_mut();
```
-Imply that `u_ref` and `self` must share a lifetime bound, and also that
+imply that `u_ref` and `self` must share a lifetime bound, and also that
`v_ref` and `u_ref` share a lifetime bound. The problem is that the function
signature for `nested_borrow_mut` only gives the compiler information about the
lifetimes of `self` and `v_ref` -- nothing about `u_ref`.