在c++20中,如果我为一个类型提供了一个
这似乎是不一致的,因为必须要求
operator==
,那么编译器会合成一个operator!=
,但反过来则不会。以下是一些代码:struct A {};
bool operator==(A const&, A const&);
struct B {};
bool operator!=(B const&, B const&);
int main()
{
if (A{} != A{}) {} // error in c++17
// ok in c++20
if (B{} == B{}) {} // error in c++17
// error in c++20, why?
}
这似乎是不一致的,因为必须要求
!=
和==
是相反的,如果一个可以从另一个中合成,那么反过来也应该可以。这是什么原因?