C++20 中主要比较运算符 (==、<=>) 的反转

vvv*_*444 2 c++ language-lawyer c++20

据我了解,C++20 标准允许编译器在代码中使用的方向运算符缺失但存在反向运算符时==自动调用反向比较运算符 for 和 。就像这个<=>例子一样:

struct A {
    constexpr A() = default;
};

struct B
{
    constexpr bool operator==(A const& other) const {
        return true;
    }
};

static_assert(B{} == A{}); // This is defined
static_assert(A{} == B{}); // Fails in C++17, automatically generated in C++20
Run Code Online (Sandbox Code Playgroud)

我查看了标准的[class.compare]部分,但我找不到它的说明位置。

有人可以指出标准中的确切位置吗?

tea*_*418 5

https://timsong-cpp.github.io/cppwp/n4868/over.match#oper-3.4.4

我认为它在:

表达式中的重载解析/运算符

[超过匹配操作]

对于相等运算符,对于表达式 y == x 的每个非重写候选,重写候选还包括一个合成候选,其中两个参数的顺序相反。