title: Why does std::map emplace need a copy constructor on gcc?
body: <p>The following code compiles well on Visual Studio's Visual C++ 19.0 compiler, but gcc 5.4.0 complains about the copy constructor being private.</p>
  
  <pre><code>#include &lt;map&gt;
  
  class CMyClass
  {
  public:
    CMyClass(int) {};
  private:
    CMyClass(const CMyClass&amp;); // I want to avoid copy construction
  };
  
  int main()
  {
    std::map&lt;int, CMyClass&gt; mymap;
    mymap.emplace(0, 0);
  
    return 0;
  }
  </code></pre>
  
  <p>Error message: </p>
  
  <pre><code>‘CMyClass::CMyClass(const CMyClass&amp;)’ is private
  </code></pre>
  
  <p>Isn't avoiding copies exactly what <code>emplace</code> is for? Am I missing something?</p>