【问题标题】:Unordered Associative Container constraint for std::unordered_mapstd::unordered_map 的无序关联容器约束
【发布时间】:2021-03-28 14:20:16
【问题描述】:

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

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

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

错误 C7602: 'Write': 不满足相关约束

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

非常感谢!

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

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

【问题讨论】:

  • 您确实应该将相关代码发布到问题中 - 网站政策是不相信外部网站上的关键内容仍然可用(即使答案也应在提供链接时引用相关部分)。

标签: c++ std unordered-map c++-concepts


【解决方案1】:

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

{ a.swap( ContainerType() ) }; 

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多