title: Cannot move out from behind mutable reference to Option
body: <p>I've got a struct:</p>
  <pre class="lang-rust prettyprint-override"><code>struct Foo&lt;'a&gt; {
      parent: Option&lt;&amp;'a mut Foo&lt;'a&gt;&gt;,
      value: i32,
  }
  
  impl&lt;'a&gt; Foo&lt;'a&gt; {
      fn bar(&amp;mut self) {
          if let Some(&amp;mut parent) = self.parent {
              parent.bar();
          } else {
              self.value = 1;
          }
      }
  }
  </code></pre>
  <p>But I get the error:</p>
  <pre class="lang-none prettyprint-override"><code>error[E0507]: cannot move out of `*self.parent.0` which is behind a mutable reference
   --&gt; src/lib.rs:8:36
    |
  8 |         if let Some(&amp;mut parent) = self.parent {
    |                          ------    ^^^^^^^^^^^ help: consider borrowing here: `&amp;self.parent`
    |                          |
    |                          data moved here
    |                          move occurs because `parent` has type `Foo&lt;'_&gt;`, which does not implement the `Copy` trait
  
  error[E0596]: cannot borrow `parent` as mutable, as it is not declared as mutable
   --&gt; src/lib.rs:9:13
    |
  8 |         if let Some(&amp;mut parent) = self.parent {
    |                          ------ help: consider changing this to be mutable: `mut parent`
  9 |             parent.bar();
    |             ^^^^^^ cannot borrow as mutable
  </code></pre>
  <p>I've tried many variations of that line and can't get it to work. How can I do this?</p>