title: Is one mutable reference in Rust really enforced?
body: <p>I just started on Rust couple days ago and work through concept of ownership now.</p>
  <p>So ok - you can't have more than one mutable reference - I dig that - so this fails:</p>
  <pre><code>let mut s4= String::from(&quot;ZOOT&quot;);
  let s5 = &amp;mut s4;
  let s6 = &amp;mut s4; //error here - second mutable borrow occurs here
  s5.push_str(&quot; suit&quot;); //added this line to force error on s6
  </code></pre>
  <p>but why is this allowed???</p>
  <pre><code>let mut s4= String::from(&quot;ZOOT&quot;);
  let s5 = &amp;mut s4;
  s5.push_str(&quot; suit&quot;);
  let s6 = &amp;mut s4; //but WHY NOT here?
  </code></pre>
  <p>and yes <code>println!(&quot;s6 = {} &quot;, s6);</code> prints <code>ZOOT suit</code>.</p>
  <p>PS. I do understand that after the line <code>let s6 = &amp;mut s4;</code> the <code>s5</code> is no longer accessible - if you try then suddenly compiler wakes up and throws error on <code>s6</code> declaration. But should it throw fit - on the second reference to <code>s4</code> with or without <code>s5</code> being used to modify content of <code>s4</code>?</p>