<=>
C ++ 20 의 새로운 우주선 연산자 로 이상한 행동을하고 있습니다. 와 함께 Visual Studio 2019 컴파일러를 사용하고 /std:c++latest
있습니다.
이 코드는 예상대로 정상적으로 컴파일됩니다.
#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;
}
};
다음과 같은 컴파일러 오류가 발생합니다.
error C2676: binary '==': 'X' does not define this operator or a conversion to a type acceptable to the predefined operator
나는 이것을 clang에서도 시도해 보았고 비슷한 행동을 얻었습니다.
기본 구현이 operator==
올바르게 생성되는 이유에 대한 설명에 감사 하지만 사용자 지정 구현 은 그렇지 않습니다.