Title
flat_map::insert_range's Effects is not quite right
Status
new
Section
[flat.map.modifiers]
Submitter
Hewill Kang

Created on 2023-10-23.00:00:00 last changed 1 month ago

Messages

Date: 2023-10-28.12:38:28

Proposed resolution:

This wording is relative to N4964.

  1. Modify [flat.map.modifiers] as indicated:

    template<container-compatible-range<value_type> R>
      void insert_range(R&& rg);
    

    -12- Effects: Adds elements to c as if by:

    for (value_typeconst auto& e : rg) {
      c.keys.insert(c.keys.end(), std::move(e.first));
      c.values.insert(c.values.end(), std::move(e.second));
    }
    

    […]

Date: 2023-10-23.00:00:00

flat_map::insert_range adds elements to the containers member via:

for (const auto& e : rg) {
  c.keys.insert(c.keys.end(), e.first);
  c.values.insert(c.values.end(), e.second);
}

which is incorrect because rg's value type may not be a pair (tuple, for instance), which means that .first and .second are not valid in such cases.

History
Date User Action Args
2023-10-28 12:38:28adminsetmessages: + msg13771
2023-10-23 00:00:00admincreate