ฉันพบพฤติกรรมแปลก ๆ กับผู้ประกอบการยานอวกาศใหม่<=>
ใน 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
ฉันลองทำเสียงดังกราวเช่นกันและฉันก็มีพฤติกรรมที่คล้ายกัน
ฉันขอขอบคุณคำอธิบายบางอย่างเกี่ยวกับสาเหตุที่การใช้งานเริ่มต้นสร้างขึ้นoperator==
อย่างถูกต้อง แต่การกำหนดเองไม่ได้