相关疑难解决方法(0)

比较对象可以作为const调用

当我尝试运行以下代码时,clang(6.0)和g ++(8)与-std = c ++ 17都会给我一个static_assert错误:

#include <set>
struct A {};

struct ProcessComparator { inline bool operator()(const A&, const A&) { return true; } };

int main(void)
{
    std::set<A, ProcessComparator> A_Set;

    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

g ++ 8

/usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/stl_tree.h:457:7:错误:由于需求'is_invocable_v',static_assert失败"比较对象必须作为const调用"

铿锵6.0

/usr/include/c++/8/bits/stl_tree.h:457:21:错误:静态断言失败:比较对象必须作为const调用

将const作为operator()签名的一部分来修复此问题:

#include <set>

struct A {};

/* Add const as part of the operator's signature */
struct ProcessComparator { inline bool operator()(const A&, const A&) const { return true; } };

int main(void)
{
    std::set<A, ProcessComparator> A_Set;

    return EXIT_SUCCESS;
} …
Run Code Online (Sandbox Code Playgroud)

c++ stl c++17

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

标签 统计

c++ ×1

c++17 ×1

stl ×1