title: Move constructor on derived object
body: <p>When you have a derived object with a move constructor, and the base object also has move semantics, what is the proper way to call the base object move constructor from the derived object move constructor?</p>
  
  <p>I tried the most obvious thing first:</p>
  
  <pre><code> Derived(Derived&amp;&amp; rval) : Base(rval)
   { }
  </code></pre>
  
  <p>However, this seems to end up calling the Base object's <em>copy constructor</em>.  Then I tried explicitly using <code>std::move</code> here, like this:</p>
  
  <pre><code> Derived(Derived&amp;&amp; rval) : Base(std::move(rval))
   { }
  </code></pre>
  
  <p>This worked, but I'm confused why it's necessary.  I thought <code>std::move</code> merely returns an rvalue reference.  But since in this example <code>rval</code> is already an rvalue reference, the call to <code>std::move</code> should be superfluous.  But if I don't use <code>std::move</code> here, it just calls the copy constructor.  So why is the call to <code>std::move</code> necessary?</p>