首页 > 解决方案 > std::unordered_map 的无序关联容器约束

问题描述

我已经更新到 Visual Studio 2019 的新版本(我认为是 16.6->16.9)并且正在编译的一段代码现在不是。

我在下面的 Godbolt 中复制了错误,但总而言之,我编写了一个函数,其参数被限制为接受 std::unordered_map 的。

这曾经有效,但现在不再有效,所有编译器输出为:

错误 C7602:“写入”:不满足关联的约束

这真的没有用。如果有人有调试 C++ 概念的提示,将不胜感激。

非常感谢!

带有命令行的最新 VS2019:/std:c++latest https://godbolt.org/z/WKadvn6sv

带有命令行的最新 Clang:-std=c++20 https://godbolt.org/z/Mrxoxqco9

标签: c++stdunordered-mapc++-concepts

解决方案


所以问题在于所需的子概念“可修改”。它需要此签名的交换功能,而以前有效的功能现在不需要:

{ a.swap( ContainerType() ) }; 

如果我把它换成这个,它现在可以工作了:

{ a.swap( a ) } -> std::convertible_to<void>;

完美的?不太确定 arg a 应该是 arg b 并且另一个模板参数被引入到我的 Modifiable 概念中。

一个大问题仍然存在 - 为什么所有这些都没有成为 C++ 的标准?


推荐阅读