我在C++20中使用新的太空船操作符
这段代码如预期般编译通过:
然而,如果我将X更改为这个:
我遇到了以下编译器错误:
错误 C2676:二进制'==':'X'未定义此运算符或转换为预定义运算符可接受的类型
我也在clang上尝试了这个,结果出现了类似的情况。
我希望能够解释一下为什么默认实现能够正确生成'operator==',但自定义实现却不能。
<=>
遇到了一个奇怪的行为。我正在使用带有/std:c++latest
的Visual Studio 2019编译器。这段代码如预期般编译通过:
#include <compare>
struct X
{
int Dummy = 0;
auto operator<=>(const X&) const = default; // Default implementation
};
int main()
{
X a, b;
a == b; // OK!
return 0;
}
然而,如果我将X更改为这个:
struct X
{
int Dummy = 0;
auto operator<=>(const X& other) const
{
return Dummy <=> other.Dummy;
}
};
我遇到了以下编译器错误:
错误 C2676:二进制'==':'X'未定义此运算符或转换为预定义运算符可接受的类型
我也在clang上尝试了这个,结果出现了类似的情况。
我希望能够解释一下为什么默认实现能够正确生成'operator==',但自定义实现却不能。