title: How does Rust provide move semantics?
body: <p>The <a href="http://www.rust-lang.org/" rel="nofollow noreferrer">Rust language website</a> claims move semantics as one of the features of the language. But I can't see how move semantics is implemented in Rust.</p>
  <p>Rust boxes are the only place where move semantics are used.</p>
  <pre class="lang-rust prettyprint-override"><code>let x = Box::new(5);
  let y: Box&lt;i32&gt; = x; // x is 'moved'
  </code></pre>
  <p>The above Rust code can be written in C++ as</p>
  <pre class="lang-cpp prettyprint-override"><code>auto x = std::make_unique&lt;int&gt;(5);
  auto y = std::move(x); // Note the explicit move
  </code></pre>
  <p>As far as I know (correct me if I'm wrong),</p>
  <ul>
  <li>Rust doesn't have constructors at all, let alone move constructors.</li>
  <li>No support for rvalue references.</li>
  <li>No way to create functions overloads with rvalue parameters.</li>
  </ul>
  <p>How does Rust provide move semantics?</p>