title: What can I do with a moved-from object?
body: <p>Does the standard define precisely what I can do with an object once it has been moved from? I used to think that all you can do with a moved-from object is do destruct it, but that would not be sufficient.</p>
  
  <p>For example, take the function template <code>swap</code> as defined in the standard library:</p>
  
  <pre><code>template &lt;typename T&gt;
  void swap(T&amp; a, T&amp; b)
  {
      T c = std::move(a); // line 1
      a = std::move(b);   // line 2: assignment to moved-from object!
      b = std::move(c);   // line 3: assignment to moved-from object!
  }
  </code></pre>
  
  <p>Obviously, it must be possible to assign to moved-from objects, otherwise lines 2 and 3 would fail. So what else can I do with moved-from objects? Where exactly can I find these details in the standard?</p>
  
  <p>(By the way, why is it <code>T c = std::move(a);</code> instead of <code>T c(std::move(a));</code> in line 1?)</p>