Ark*_*493 9 c++ stdmap language-lawyer c++20
目前我正在尝试将 C++ 的一些命名要求转换为 C++20 概念(https://godbolt.org/z/EdY5d6319仍然高度 WIP!)。然而,我偶然发现了一个问题。
鉴于最终的 C++20 工作草案(http://open-std.org/jtc1/sc22/wg21/docs/papers/2020/n4861.pdf):
a == twherea表示类型 X 的非常量左值和类型 Xt的左值或常量右值。X::value_type必须是 CopyAssignable。is_copy_assignable::is_assignable_v<T&, const T&>,否则为false。”std::map::因此std::map<Key, T>满足分配器感知容器的要求。因此,std::map<Key, T>::value_type必须是 CopyAssignable。但是,std::map<Key, T>::value_type被定义为std::pair<const Key, T>,由于beeing ,它不是CopyAssignable 。因此,不满足分配器感知容器要求,这与标准草案中的第 849 页相矛盾。Keyconststd::map
我在这里想念什么?
在[containers.associative.reqmts]/7 中有一个明确的解决方案:
关联容器满足分配器感知容器的所有要求,但对于
map和multimap,放置在要求value_type在表76,而不是适用于key_type和mapped_type。[注意:例如,在某些情况下key_type,即使关联的,不是,mapped_type也需要和。— 尾注 ]Cpp17CopyAssignablevalue_typepair<const key_type, mapped_type>Cpp17CopyAssignable
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |