http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57619

            Bug ID: 57619
           Summary: std::unordered_map and std::unordered_multimap::insert
                    invoking std::pair move constructor
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gdjss2728 at gmail dot com

The following code is invoking the std::pair move constructor:

int main ()
{
    std::unordered_map<std::string, std::string> mymap;
    std::unordered_multimap<std::string, std::string> mymultimap;
    std::pair<std::string, std::string> mypair{std::string("key"),
std::string("value")};
    mymultimap.insert(mypair); // std::pair move constructor invoked here
    mymap.insert(mypair); // strings already moved out!
}

This seems related to http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53657.

As far as I can tell, overload resolution is choosing `insert(_Pair&& __x)`
over `insert(const value_type& __x)`. Since this is an lvalue, the latter
should be chosen. This happens for std::unordered_map::insert and
std::unordered_multimap::insert.

Reply via email to