目前我正在尝试将 C++ 的一些命名要求转换为 C++20 概念(https://godbolt.org/z/EdY5d6319仍然高度 WIP!)。然而,我偶然发现了一个问题。
鉴于最终的 C++20 工作草案(http://open-std.org/jtc1/sc22/wg21/docs/papers/2020/n4861.pdf):
a == t
wherea
表示类型 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
被定义为 …