title: What is the post condition of a move constructor?
body: <p>Consider a class:</p>
  
  <pre><code>class foo {
  public:
    foo(foo &amp;&amp;rhs) { /* some code */ }
    ~foo() noexcept { /* code that does destruction of owning objects */ }
  private:
    /* some non-trivial pointer graph like structure */
  };
  </code></pre>
  
  <p>Assume:</p>
  
  <pre><code>{
    foo &amp;f = get_from_other_class();
    foo g = std::move(f);
    // some time later f goes our of scope or the owning object is destroyed.
  }
  </code></pre>
  
  <p>What post conditions apply to <code>f</code> after <code>std::move(f)</code> has been executed?</p>
  
  <h3>Note</h3>
  
  <p>I have the suspicion that <code>f</code> must still be cleanly destructible (not destroying owning content of <code>g</code>) but I haven't found the corresponding quote in the <em>C++11</em> standard. I'm skimming through 12.8 copying and moving class objects. </p>