title: In c++11, can a virtual function return a large value efficiently with move semantics?
body: <p>Normally, this would be optimised to not involve copying the large value (since a <code>std::vector</code> has move semantics enabled):</p>
  
  <pre><code>std::vector&lt;int&gt; makeABigThing(){
      std::vector&lt;int&gt; large_thing(1000, 0);
      return large_thing;
  }
  </code></pre>
  
  <p>Can this also be optimised in the same way if the function is a virtual method:</p>
  
  <pre><code>struct Foo{
      virtual std::vector&lt;int&gt; makeABigThing(){
          std::vector&lt;int&gt; large_thing(1000, 0);
          return large_thing;
      }
  };
  </code></pre>
  
  <p>i.e., do move semantics work with even when the called function is selected at runtime?</p>