C++ std::map 命名需求分配器感知容器

C++ std::map named requirements allocator-aware container

目前我正在尝试将一些 C++ 的命名要求转换为 C++20 概念(https://godbolt.org/z/EdY5d6319 仍然高度 WIP!)。但是,我偶然发现了一个问题。

鉴于最终的 C++20 工作草案 (http://open-std.org/jtc1/sc22/wg21/docs/papers/2020/n4861.pdf):

所以std::map<Key, T>满足分配器感知容器的要求。因此,std::map<Key, T>::value_type 必须是 CopyAssignable。 但是,std::map<Key, T>::value_type 被定义为 std::pair<const Key, T>,由于 Key 蜂鸣 const,因此 不是 CopyAssignable。 因此,std::map 不符合分配器感知容器要求,这与标准草案中的第 849 页相矛盾。

我在这里想念什么?

[containers.associative.reqmts]/7 中对这种情况有明确的划分:

The associative containers meet all the requirements of Allocator-aware containers, except that for map and multimap, the requirements placed on value_­type in Table 76 apply instead to key_­type and mapped_­type. [ Note: For example, in some cases key_­type and mapped_­type are required to be Cpp17CopyAssignable even though the associated value_­type, pair<const key_­type, mapped_­type>, is not Cpp17CopyAssignable. — end note ]