flat_map::insert_range
's Effects is not quite rightSection: 23.6.8.7 [flat.map.modifiers] Status: New Submitter: Hewill Kang Opened: 2023-10-23 Last modified: 2024-02-22
Priority: 3
View all issues with New status.
Discussion:
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.
[2024-02-22; Reflector poll]
Set priority to 3 after reflector poll in October 2023.
"This is P2767 section 6 which LWG looked at in Varna, and was turned into https://github.com/cplusplus/draft/pull/6274 as an editorial change."
Proposed resolution:
This wording is relative to N4964.
Modify 23.6.8.7 [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)); }[…]