title: How can function recv on mpsc take a reference and return ownership?
body: <p>Here's an example of message based communication using <code>mpsc</code>.</p>
  <pre><code>use std::thread;
  use std::sync::mpsc::
  let (tx, rx) = channel();
  thread::spawn(move|| {
      tx.send(10).unwrap();
  });
  assert_eq!(rx.recv().unwrap(), 10);
  </code></pre>
  <p>Heres how the <code>recv</code> isdefined.</p>
  <pre><code>pub struct Receiver&lt;T&gt; { /* fields omitted */ }
  pub fn recv(&amp;self) -&gt; Result&lt;T, RecvError&gt;
  </code></pre>
  <p>How can a method taking reference return ownership of <code>T</code> where  <code>T</code> is not bound by <code>Copy</code> or <code>Clone</code>. Doesnt it break rust ownership rules? I took  a look into source and I  see many <code>unsafe</code> in it. Is it a way of making it safe with unsafes?</p>