title: Variable binding: moving a &mut or borrowing the referent?
body: <p>This code fails as expected at <code>let c = a;</code> with compile error "use of moved value: <code>a</code>":</p>
  
  <pre><code>fn main() {
      let a: &amp;mut i32 = &amp;mut 0;
      let b = a;
      let c = a;
  }
  </code></pre>
  
  <p>a is moved into b and is no longer available for an assignment to c. So far, so good.</p>
  
  <p>However, if I just annotate <code>b</code>'s type and leave everything else alone:</p>
  
  <pre><code>fn main() {
      let a: &amp;mut i32 = &amp;mut 0;
      let b: &amp;mut i32 = a;
      let c = a;
  }
  </code></pre>
  
  <p>the code fails again at <code>let c = a;</code></p>
  
  <p>But this time with a very different error message: "cannot move out of <code>a</code> because it is borrowed ... borrow of <code>*a</code> occurs here: <code>let b: &amp;mut i32 = a;</code>"</p>
  
  <p>So, if I just annotate <code>b</code>'s type: no move of <code>a</code> into <code>b</code>, but instead a "re"-borrow of <code>*a</code>?</p>
  
  <p>What am I missing?</p>
  
  <p>Cheers.</p>