小编Woo*_*ord的帖子

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

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

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

  • 第 790 页:对分配器感知容器的要求:
    给定一个具有 value_type T 的分配器感知容器 X,需要表达式a == twherea表示类型 X 的非常量左值和类型 Xt的左值或常量右值。
    先决条件: T 是 Cpp17CopyInsertable 到 X 和Cpp17CopyAssignable
    -> 因此,X::value_type必须是 CopyAssignable。
  • 第 699 页is_copy_assignable::
    “对于可引用类型 T,结果与 相同is_assignable_v<T&, const T&>,否则为false。”
  • 第 849 页std::map::
    “映射满足容器、可逆容器(22.2)、关联容器(22.2.6)和分配器感知容器(表 76)的所有要求。”

因此std::map<Key, T>满足分配器感知容器的要求。因此,std::map<Key, T>::value_type必须是 CopyAssignable。但是,std::map<Key, T>::value_type被定义为 …

c++ stdmap language-lawyer c++20

9
推荐指数
1
解决办法
149
查看次数

标签 统计

c++ ×1

c++20 ×1

language-lawyer ×1

stdmap ×1