title: Why couldn't push_back be overloaded to do the job of emplace_back?
body: <p>Firstly, I'm aware of <a href="https://stackoverflow.com/questions/4303513/push-back-vs-emplace-back">this question</a>, but I don't believe I'm asking the same thing.</p>
  
  <p>I know what <code>std::vector&lt;T&gt;::emplace_back</code> <em>does</em> - and I understand why I would use it over <code>push_back()</code>.  It uses variadic templates allowing me to forward multiple arguments to the constructor of a new element.</p>
  
  <p>But what I don't understand is why the C++ standard committee decided there was a need for a new member function.  Why couldn't they simply extend the functionality of <code>push_back()</code>.  As far as I can see, <code>push_back</code> could be overloaded in C++11 to be:</p>
  
  <pre><code>template &lt;class... Args&gt;
  void push_back(Args&amp;&amp;... args);
  </code></pre>
  
  <p>This would not break backwards compatibility, while allowing you to pass N arguments, including arguments that would invoke a normal rvalue or copy constructor.  In fact, the GCC C++11 implementation of <code>push_back()</code> simply calls emplace_back anyway:</p>
  
  <pre><code>  void push_back(value_type&amp;&amp; __x)
    { 
      emplace_back(std::move(__x)); 
    }
  </code></pre>
  
  <p>So, the way I see it, there is no need for <code>emplace_back()</code>.  All they needed to add was an overload for <code>push_back()</code> which accepts variadic arguments, and forwards the arguments to the element constructor.</p>
  
  <p>Am I wrong here?  Is there some reason that an entirely new function was needed here?</p>