title: rvalue refs and std::move
body: <p>Can someone explain why B doesn't compile, but C does?  I don't understand why std::move is required since the variable is already an rvalue ref.</p>
  
  <pre><code>struct A {
    int x;
    A(int x=0) : x(x) {}
    A(A&amp;&amp; a) : x(a.x) { a.x = 0; }
  };
  
  struct B : public A {
    B() {}
    B(B&amp;&amp; b) : A(b) {}  // compile error with g++-4.7
  };
  
  struct C : public A {
    C() {}
    C(C&amp;&amp; c) : A(std::move(c)) {}  // ok, but why?
  };
  </code></pre>