title: smart pointer move semantics unclear to me
body: <p>Sorry for the generic title but I can only describe what's going on.</p>
  
  <pre><code>std::unique_ptr&lt;int&gt; qq() {
      int b = 11;
      std::unique_ptr&lt;int&gt; f(&amp;b);
  
      return f;
  }
  
  int main() {
      std::unique_ptr&lt;int&gt; q = qq();
      int *p = q.release();
  
      *p = 11;
  
      std::cout &lt;&lt; *p &lt;&lt; "\n";
  
      std::cout &lt;&lt; *p &lt;&lt; "\n";
  
      return 0;
  }
  </code></pre>
  
  <p>outputs</p>
  
  <pre><code>11
  32767 // why not 11?
  </code></pre>
  
  <p>returning with <code>return std::move(f)</code> results in an output of</p>
  
  <pre><code>11
  0 // why not 11?
  </code></pre>