隐式运算符 != 解决运算符 == 中的歧义

Fed*_*dor 9 c++ visual-studio language-lawyer c++20

如果某个结构体A显式声明了operator ==方法,但同时存在全局operator ==接受类型为 的参数A,则相等比较将导致歧义错误。

在 C++20 中,我们可以调用不等式operator !=,编译器会将其解释为相等运算符的否定。我虽然在相同的情况下也会出现歧义错误,并且确实 GCC 和 Clang 显示了它,但最新的 Visual Studio 2019 接受代码:

struct A { 
    bool operator ==(const A&) const = delete; 
};

bool operator ==(const A&, const A&) { return true; }

int main() {
    A a;
    //a == a; //error everywhere
    return a != a; //ok in MSVC
}
Run Code Online (Sandbox Code Playgroud)

演示: https: //gcc.godbolt.org/z/ds53Wv783

这只是 MSVC 中的一个错误吗?