title: push_back(move(struct.unique_ptr)) causes compile errors
body: <p>I have a function which is like</p>
  
  <pre><code>for (auto&amp;&amp; i : v) {
      ...
      this-&gt;fifoQueue.push_back(move(i.p));
      ...
  }
  </code></pre>
  
  <p>where <code>fifoQueue</code> is of type <code>vector&lt;unique_ptr&lt;T&gt; &gt;</code>, <code>v</code> is of type <code>vector&lt;struct s&gt;</code>, and <code>struct s</code> is</p>
  
  <pre><code>struct s {
      ...
      std::unique_ptr&lt;T&gt; p;
      ...
  };
  </code></pre>
  
  <p>The statement <code>this-&gt;fifoQueue.push_back(move(i.p));</code> has caused a compiler error "<code>... error: declared here unique_ptr(const unique_ptr&amp;) = delete; ...</code>". What's wrong with this statement?</p>
  
  <p>I have another working statement basically the same as it, except that statement is like <code>this-&gt;fifoQueue.push_back(move(p))</code>. So <code>i.p</code> is the evil? Or <code>auto&amp;&amp;</code>?</p>
  
  <hr>
  
  <p>Update:</p>
  
  <p>As Petr inferred, <code>v</code> is indeed a <code>const</code> reference, which caused the error.</p>