当我尝试运行以下代码时,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)