1*dd639eb1SBalázs Kéri #ifndef STD_COMPARE_H 2*dd639eb1SBalázs Kéri #define STD_COMPARE_H 3*dd639eb1SBalázs Kéri 4*dd639eb1SBalázs Kéri namespace std { 5*dd639eb1SBalázs Kéri inline namespace __1 { 6*dd639eb1SBalázs Kéri 7*dd639eb1SBalázs Kéri // exposition only 8*dd639eb1SBalázs Kéri enum class _EqResult : unsigned char { 9*dd639eb1SBalázs Kéri __equal = 0, 10*dd639eb1SBalázs Kéri __equiv = __equal, 11*dd639eb1SBalázs Kéri }; 12*dd639eb1SBalázs Kéri 13*dd639eb1SBalázs Kéri enum class _OrdResult : signed char { 14*dd639eb1SBalázs Kéri __less = -1, 15*dd639eb1SBalázs Kéri __greater = 1 16*dd639eb1SBalázs Kéri }; 17*dd639eb1SBalázs Kéri 18*dd639eb1SBalázs Kéri enum class _NCmpResult : signed char { 19*dd639eb1SBalázs Kéri __unordered = -127 20*dd639eb1SBalázs Kéri }; 21*dd639eb1SBalázs Kéri 22*dd639eb1SBalázs Kéri struct _CmpUnspecifiedType; 23*dd639eb1SBalázs Kéri using _CmpUnspecifiedParam = void (_CmpUnspecifiedType::*)(); 24*dd639eb1SBalázs Kéri 25*dd639eb1SBalázs Kéri class partial_ordering { 26*dd639eb1SBalázs Kéri using _ValueT = signed char; partial_ordering(_EqResult __v)27*dd639eb1SBalázs Kéri explicit constexpr partial_ordering(_EqResult __v) noexcept 28*dd639eb1SBalázs Kéri : __value_(_ValueT(__v)) {} partial_ordering(_OrdResult __v)29*dd639eb1SBalázs Kéri explicit constexpr partial_ordering(_OrdResult __v) noexcept 30*dd639eb1SBalázs Kéri : __value_(_ValueT(__v)) {} partial_ordering(_NCmpResult __v)31*dd639eb1SBalázs Kéri explicit constexpr partial_ordering(_NCmpResult __v) noexcept 32*dd639eb1SBalázs Kéri : __value_(_ValueT(__v)) {} 33*dd639eb1SBalázs Kéri __is_ordered()34*dd639eb1SBalázs Kéri constexpr bool __is_ordered() const noexcept { 35*dd639eb1SBalázs Kéri return __value_ != _ValueT(_NCmpResult::__unordered); 36*dd639eb1SBalázs Kéri } 37*dd639eb1SBalázs Kéri 38*dd639eb1SBalázs Kéri public: 39*dd639eb1SBalázs Kéri // valid values 40*dd639eb1SBalázs Kéri static const partial_ordering less; 41*dd639eb1SBalázs Kéri static const partial_ordering equivalent; 42*dd639eb1SBalázs Kéri static const partial_ordering greater; 43*dd639eb1SBalázs Kéri static const partial_ordering unordered; 44*dd639eb1SBalázs Kéri 45*dd639eb1SBalázs Kéri // comparisons 46*dd639eb1SBalázs Kéri friend constexpr bool operator==(partial_ordering __v, _CmpUnspecifiedParam) noexcept; 47*dd639eb1SBalázs Kéri friend constexpr bool operator!=(partial_ordering __v, _CmpUnspecifiedParam) noexcept; 48*dd639eb1SBalázs Kéri friend constexpr bool operator<(partial_ordering __v, _CmpUnspecifiedParam) noexcept; 49*dd639eb1SBalázs Kéri friend constexpr bool operator<=(partial_ordering __v, _CmpUnspecifiedParam) noexcept; 50*dd639eb1SBalázs Kéri friend constexpr bool operator>(partial_ordering __v, _CmpUnspecifiedParam) noexcept; 51*dd639eb1SBalázs Kéri friend constexpr bool operator>=(partial_ordering __v, _CmpUnspecifiedParam) noexcept; 52*dd639eb1SBalázs Kéri friend constexpr bool operator==(_CmpUnspecifiedParam, partial_ordering __v) noexcept; 53*dd639eb1SBalázs Kéri friend constexpr bool operator!=(_CmpUnspecifiedParam, partial_ordering __v) noexcept; 54*dd639eb1SBalázs Kéri friend constexpr bool operator<(_CmpUnspecifiedParam, partial_ordering __v) noexcept; 55*dd639eb1SBalázs Kéri friend constexpr bool operator<=(_CmpUnspecifiedParam, partial_ordering __v) noexcept; 56*dd639eb1SBalázs Kéri friend constexpr bool operator>(_CmpUnspecifiedParam, partial_ordering __v) noexcept; 57*dd639eb1SBalázs Kéri friend constexpr bool operator>=(_CmpUnspecifiedParam, partial_ordering __v) noexcept; 58*dd639eb1SBalázs Kéri 59*dd639eb1SBalázs Kéri friend constexpr partial_ordering operator<=>(partial_ordering __v, _CmpUnspecifiedParam) noexcept; 60*dd639eb1SBalázs Kéri friend constexpr partial_ordering operator<=>(_CmpUnspecifiedParam, partial_ordering __v) noexcept; 61*dd639eb1SBalázs Kéri 62*dd639eb1SBalázs Kéri // test helper test_eq(partial_ordering const & other)63*dd639eb1SBalázs Kéri constexpr bool test_eq(partial_ordering const &other) const noexcept { 64*dd639eb1SBalázs Kéri return __value_ == other.__value_; 65*dd639eb1SBalázs Kéri } 66*dd639eb1SBalázs Kéri 67*dd639eb1SBalázs Kéri private: 68*dd639eb1SBalázs Kéri _ValueT __value_; 69*dd639eb1SBalázs Kéri }; 70*dd639eb1SBalázs Kéri 71*dd639eb1SBalázs Kéri inline constexpr partial_ordering partial_ordering::less(_OrdResult::__less); 72*dd639eb1SBalázs Kéri inline constexpr partial_ordering partial_ordering::equivalent(_EqResult::__equiv); 73*dd639eb1SBalázs Kéri inline constexpr partial_ordering partial_ordering::greater(_OrdResult::__greater); 74*dd639eb1SBalázs Kéri inline constexpr partial_ordering partial_ordering::unordered(_NCmpResult ::__unordered); 75*dd639eb1SBalázs Kéri constexpr bool operator==(partial_ordering __v, _CmpUnspecifiedParam) noexcept { 76*dd639eb1SBalázs Kéri return __v.__is_ordered() && __v.__value_ == 0; 77*dd639eb1SBalázs Kéri } 78*dd639eb1SBalázs Kéri constexpr bool operator<(partial_ordering __v, _CmpUnspecifiedParam) noexcept { 79*dd639eb1SBalázs Kéri return __v.__is_ordered() && __v.__value_ < 0; 80*dd639eb1SBalázs Kéri } 81*dd639eb1SBalázs Kéri constexpr bool operator<=(partial_ordering __v, _CmpUnspecifiedParam) noexcept { 82*dd639eb1SBalázs Kéri return __v.__is_ordered() && __v.__value_ <= 0; 83*dd639eb1SBalázs Kéri } 84*dd639eb1SBalázs Kéri constexpr bool operator>(partial_ordering __v, _CmpUnspecifiedParam) noexcept { 85*dd639eb1SBalázs Kéri return __v.__is_ordered() && __v.__value_ > 0; 86*dd639eb1SBalázs Kéri } 87*dd639eb1SBalázs Kéri constexpr bool operator>=(partial_ordering __v, _CmpUnspecifiedParam) noexcept { 88*dd639eb1SBalázs Kéri return __v.__is_ordered() && __v.__value_ >= 0; 89*dd639eb1SBalázs Kéri } 90*dd639eb1SBalázs Kéri constexpr bool operator==(_CmpUnspecifiedParam, partial_ordering __v) noexcept { 91*dd639eb1SBalázs Kéri return __v.__is_ordered() && 0 == __v.__value_; 92*dd639eb1SBalázs Kéri } 93*dd639eb1SBalázs Kéri constexpr bool operator<(_CmpUnspecifiedParam, partial_ordering __v) noexcept { 94*dd639eb1SBalázs Kéri return __v.__is_ordered() && 0 < __v.__value_; 95*dd639eb1SBalázs Kéri } 96*dd639eb1SBalázs Kéri constexpr bool operator<=(_CmpUnspecifiedParam, partial_ordering __v) noexcept { 97*dd639eb1SBalázs Kéri return __v.__is_ordered() && 0 <= __v.__value_; 98*dd639eb1SBalázs Kéri } 99*dd639eb1SBalázs Kéri constexpr bool operator>(_CmpUnspecifiedParam, partial_ordering __v) noexcept { 100*dd639eb1SBalázs Kéri return __v.__is_ordered() && 0 > __v.__value_; 101*dd639eb1SBalázs Kéri } 102*dd639eb1SBalázs Kéri constexpr bool operator>=(_CmpUnspecifiedParam, partial_ordering __v) noexcept { 103*dd639eb1SBalázs Kéri return __v.__is_ordered() && 0 >= __v.__value_; 104*dd639eb1SBalázs Kéri } 105*dd639eb1SBalázs Kéri constexpr bool operator!=(partial_ordering __v, _CmpUnspecifiedParam) noexcept { 106*dd639eb1SBalázs Kéri return !__v.__is_ordered() || __v.__value_ != 0; 107*dd639eb1SBalázs Kéri } 108*dd639eb1SBalázs Kéri constexpr bool operator!=(_CmpUnspecifiedParam, partial_ordering __v) noexcept { 109*dd639eb1SBalázs Kéri return !__v.__is_ordered() || __v.__value_ != 0; 110*dd639eb1SBalázs Kéri } 111*dd639eb1SBalázs Kéri 112*dd639eb1SBalázs Kéri constexpr partial_ordering operator<=>(partial_ordering __v, _CmpUnspecifiedParam) noexcept { 113*dd639eb1SBalázs Kéri return __v; 114*dd639eb1SBalázs Kéri } 115*dd639eb1SBalázs Kéri constexpr partial_ordering operator<=>(_CmpUnspecifiedParam, partial_ordering __v) noexcept { 116*dd639eb1SBalázs Kéri return __v < 0 ? partial_ordering::greater : (__v > 0 ? partial_ordering::less : __v); 117*dd639eb1SBalázs Kéri } 118*dd639eb1SBalázs Kéri 119*dd639eb1SBalázs Kéri class weak_ordering { 120*dd639eb1SBalázs Kéri using _ValueT = signed char; weak_ordering(_EqResult __v)121*dd639eb1SBalázs Kéri explicit constexpr weak_ordering(_EqResult __v) noexcept : __value_(_ValueT(__v)) {} weak_ordering(_OrdResult __v)122*dd639eb1SBalázs Kéri explicit constexpr weak_ordering(_OrdResult __v) noexcept : __value_(_ValueT(__v)) {} 123*dd639eb1SBalázs Kéri 124*dd639eb1SBalázs Kéri public: 125*dd639eb1SBalázs Kéri static const weak_ordering less; 126*dd639eb1SBalázs Kéri static const weak_ordering equivalent; 127*dd639eb1SBalázs Kéri static const weak_ordering greater; 128*dd639eb1SBalázs Kéri 129*dd639eb1SBalázs Kéri // conversions partial_ordering()130*dd639eb1SBalázs Kéri constexpr operator partial_ordering() const noexcept { 131*dd639eb1SBalázs Kéri return __value_ == 0 ? partial_ordering::equivalent 132*dd639eb1SBalázs Kéri : (__value_ < 0 ? partial_ordering::less : partial_ordering::greater); 133*dd639eb1SBalázs Kéri } 134*dd639eb1SBalázs Kéri 135*dd639eb1SBalázs Kéri // comparisons 136*dd639eb1SBalázs Kéri friend constexpr bool operator==(weak_ordering __v, _CmpUnspecifiedParam) noexcept; 137*dd639eb1SBalázs Kéri friend constexpr bool operator!=(weak_ordering __v, _CmpUnspecifiedParam) noexcept; 138*dd639eb1SBalázs Kéri friend constexpr bool operator<(weak_ordering __v, _CmpUnspecifiedParam) noexcept; 139*dd639eb1SBalázs Kéri friend constexpr bool operator<=(weak_ordering __v, _CmpUnspecifiedParam) noexcept; 140*dd639eb1SBalázs Kéri friend constexpr bool operator>(weak_ordering __v, _CmpUnspecifiedParam) noexcept; 141*dd639eb1SBalázs Kéri friend constexpr bool operator>=(weak_ordering __v, _CmpUnspecifiedParam) noexcept; 142*dd639eb1SBalázs Kéri friend constexpr bool operator==(_CmpUnspecifiedParam, weak_ordering __v) noexcept; 143*dd639eb1SBalázs Kéri friend constexpr bool operator!=(_CmpUnspecifiedParam, weak_ordering __v) noexcept; 144*dd639eb1SBalázs Kéri friend constexpr bool operator<(_CmpUnspecifiedParam, weak_ordering __v) noexcept; 145*dd639eb1SBalázs Kéri friend constexpr bool operator<=(_CmpUnspecifiedParam, weak_ordering __v) noexcept; 146*dd639eb1SBalázs Kéri friend constexpr bool operator>(_CmpUnspecifiedParam, weak_ordering __v) noexcept; 147*dd639eb1SBalázs Kéri friend constexpr bool operator>=(_CmpUnspecifiedParam, weak_ordering __v) noexcept; 148*dd639eb1SBalázs Kéri 149*dd639eb1SBalázs Kéri friend constexpr weak_ordering operator<=>(weak_ordering __v, _CmpUnspecifiedParam) noexcept; 150*dd639eb1SBalázs Kéri friend constexpr weak_ordering operator<=>(_CmpUnspecifiedParam, weak_ordering __v) noexcept; 151*dd639eb1SBalázs Kéri 152*dd639eb1SBalázs Kéri // test helper test_eq(weak_ordering const & other)153*dd639eb1SBalázs Kéri constexpr bool test_eq(weak_ordering const &other) const noexcept { 154*dd639eb1SBalázs Kéri return __value_ == other.__value_; 155*dd639eb1SBalázs Kéri } 156*dd639eb1SBalázs Kéri 157*dd639eb1SBalázs Kéri private: 158*dd639eb1SBalázs Kéri _ValueT __value_; 159*dd639eb1SBalázs Kéri }; 160*dd639eb1SBalázs Kéri 161*dd639eb1SBalázs Kéri inline constexpr weak_ordering weak_ordering::less(_OrdResult::__less); 162*dd639eb1SBalázs Kéri inline constexpr weak_ordering weak_ordering::equivalent(_EqResult::__equiv); 163*dd639eb1SBalázs Kéri inline constexpr weak_ordering weak_ordering::greater(_OrdResult::__greater); 164*dd639eb1SBalázs Kéri constexpr bool operator==(weak_ordering __v, _CmpUnspecifiedParam) noexcept { 165*dd639eb1SBalázs Kéri return __v.__value_ == 0; 166*dd639eb1SBalázs Kéri } 167*dd639eb1SBalázs Kéri constexpr bool operator!=(weak_ordering __v, _CmpUnspecifiedParam) noexcept { 168*dd639eb1SBalázs Kéri return __v.__value_ != 0; 169*dd639eb1SBalázs Kéri } 170*dd639eb1SBalázs Kéri constexpr bool operator<(weak_ordering __v, _CmpUnspecifiedParam) noexcept { 171*dd639eb1SBalázs Kéri return __v.__value_ < 0; 172*dd639eb1SBalázs Kéri } 173*dd639eb1SBalázs Kéri constexpr bool operator<=(weak_ordering __v, _CmpUnspecifiedParam) noexcept { 174*dd639eb1SBalázs Kéri return __v.__value_ <= 0; 175*dd639eb1SBalázs Kéri } 176*dd639eb1SBalázs Kéri constexpr bool operator>(weak_ordering __v, _CmpUnspecifiedParam) noexcept { 177*dd639eb1SBalázs Kéri return __v.__value_ > 0; 178*dd639eb1SBalázs Kéri } 179*dd639eb1SBalázs Kéri constexpr bool operator>=(weak_ordering __v, _CmpUnspecifiedParam) noexcept { 180*dd639eb1SBalázs Kéri return __v.__value_ >= 0; 181*dd639eb1SBalázs Kéri } 182*dd639eb1SBalázs Kéri constexpr bool operator==(_CmpUnspecifiedParam, weak_ordering __v) noexcept { 183*dd639eb1SBalázs Kéri return 0 == __v.__value_; 184*dd639eb1SBalázs Kéri } 185*dd639eb1SBalázs Kéri constexpr bool operator!=(_CmpUnspecifiedParam, weak_ordering __v) noexcept { 186*dd639eb1SBalázs Kéri return 0 != __v.__value_; 187*dd639eb1SBalázs Kéri } 188*dd639eb1SBalázs Kéri constexpr bool operator<(_CmpUnspecifiedParam, weak_ordering __v) noexcept { 189*dd639eb1SBalázs Kéri return 0 < __v.__value_; 190*dd639eb1SBalázs Kéri } 191*dd639eb1SBalázs Kéri constexpr bool operator<=(_CmpUnspecifiedParam, weak_ordering __v) noexcept { 192*dd639eb1SBalázs Kéri return 0 <= __v.__value_; 193*dd639eb1SBalázs Kéri } 194*dd639eb1SBalázs Kéri constexpr bool operator>(_CmpUnspecifiedParam, weak_ordering __v) noexcept { 195*dd639eb1SBalázs Kéri return 0 > __v.__value_; 196*dd639eb1SBalázs Kéri } 197*dd639eb1SBalázs Kéri constexpr bool operator>=(_CmpUnspecifiedParam, weak_ordering __v) noexcept { 198*dd639eb1SBalázs Kéri return 0 >= __v.__value_; 199*dd639eb1SBalázs Kéri } 200*dd639eb1SBalázs Kéri 201*dd639eb1SBalázs Kéri constexpr weak_ordering operator<=>(weak_ordering __v, _CmpUnspecifiedParam) noexcept { 202*dd639eb1SBalázs Kéri return __v; 203*dd639eb1SBalázs Kéri } 204*dd639eb1SBalázs Kéri constexpr weak_ordering operator<=>(_CmpUnspecifiedParam, weak_ordering __v) noexcept { 205*dd639eb1SBalázs Kéri return __v < 0 ? weak_ordering::greater : (__v > 0 ? weak_ordering::less : __v); 206*dd639eb1SBalázs Kéri } 207*dd639eb1SBalázs Kéri 208*dd639eb1SBalázs Kéri class strong_ordering { 209*dd639eb1SBalázs Kéri using _ValueT = signed char; strong_ordering(_EqResult __v)210*dd639eb1SBalázs Kéri explicit constexpr strong_ordering(_EqResult __v) noexcept : __value_(static_cast<signed char>(__v)) {} strong_ordering(_OrdResult __v)211*dd639eb1SBalázs Kéri explicit constexpr strong_ordering(_OrdResult __v) noexcept : __value_(static_cast<signed char>(__v)) {} 212*dd639eb1SBalázs Kéri 213*dd639eb1SBalázs Kéri public: 214*dd639eb1SBalázs Kéri static const strong_ordering less; 215*dd639eb1SBalázs Kéri static const strong_ordering equal; 216*dd639eb1SBalázs Kéri static const strong_ordering equivalent; 217*dd639eb1SBalázs Kéri static const strong_ordering greater; 218*dd639eb1SBalázs Kéri 219*dd639eb1SBalázs Kéri // conversions partial_ordering()220*dd639eb1SBalázs Kéri constexpr operator partial_ordering() const noexcept { 221*dd639eb1SBalázs Kéri return __value_ == 0 ? partial_ordering::equivalent 222*dd639eb1SBalázs Kéri : (__value_ < 0 ? partial_ordering::less : partial_ordering::greater); 223*dd639eb1SBalázs Kéri } weak_ordering()224*dd639eb1SBalázs Kéri constexpr operator weak_ordering() const noexcept { 225*dd639eb1SBalázs Kéri return __value_ == 0 ? weak_ordering::equivalent 226*dd639eb1SBalázs Kéri : (__value_ < 0 ? weak_ordering::less : weak_ordering::greater); 227*dd639eb1SBalázs Kéri } 228*dd639eb1SBalázs Kéri 229*dd639eb1SBalázs Kéri // comparisons 230*dd639eb1SBalázs Kéri friend constexpr bool operator==(strong_ordering __v, _CmpUnspecifiedParam) noexcept; 231*dd639eb1SBalázs Kéri friend constexpr bool operator!=(strong_ordering __v, _CmpUnspecifiedParam) noexcept; 232*dd639eb1SBalázs Kéri friend constexpr bool operator<(strong_ordering __v, _CmpUnspecifiedParam) noexcept; 233*dd639eb1SBalázs Kéri friend constexpr bool operator<=(strong_ordering __v, _CmpUnspecifiedParam) noexcept; 234*dd639eb1SBalázs Kéri friend constexpr bool operator>(strong_ordering __v, _CmpUnspecifiedParam) noexcept; 235*dd639eb1SBalázs Kéri friend constexpr bool operator>=(strong_ordering __v, _CmpUnspecifiedParam) noexcept; 236*dd639eb1SBalázs Kéri friend constexpr bool operator==(_CmpUnspecifiedParam, strong_ordering __v) noexcept; 237*dd639eb1SBalázs Kéri friend constexpr bool operator!=(_CmpUnspecifiedParam, strong_ordering __v) noexcept; 238*dd639eb1SBalázs Kéri friend constexpr bool operator<(_CmpUnspecifiedParam, strong_ordering __v) noexcept; 239*dd639eb1SBalázs Kéri friend constexpr bool operator<=(_CmpUnspecifiedParam, strong_ordering __v) noexcept; 240*dd639eb1SBalázs Kéri friend constexpr bool operator>(_CmpUnspecifiedParam, strong_ordering __v) noexcept; 241*dd639eb1SBalázs Kéri friend constexpr bool operator>=(_CmpUnspecifiedParam, strong_ordering __v) noexcept; 242*dd639eb1SBalázs Kéri 243*dd639eb1SBalázs Kéri friend constexpr strong_ordering operator<=>(strong_ordering __v, _CmpUnspecifiedParam) noexcept; 244*dd639eb1SBalázs Kéri friend constexpr strong_ordering operator<=>(_CmpUnspecifiedParam, strong_ordering __v) noexcept; 245*dd639eb1SBalázs Kéri 246*dd639eb1SBalázs Kéri // test helper test_eq(strong_ordering const & other)247*dd639eb1SBalázs Kéri constexpr bool test_eq(strong_ordering const &other) const noexcept { 248*dd639eb1SBalázs Kéri return __value_ == other.__value_; 249*dd639eb1SBalázs Kéri } 250*dd639eb1SBalázs Kéri 251*dd639eb1SBalázs Kéri private: 252*dd639eb1SBalázs Kéri _ValueT __value_; 253*dd639eb1SBalázs Kéri }; 254*dd639eb1SBalázs Kéri 255*dd639eb1SBalázs Kéri inline constexpr strong_ordering strong_ordering::less(_OrdResult::__less); 256*dd639eb1SBalázs Kéri inline constexpr strong_ordering strong_ordering::equal(_EqResult::__equal); 257*dd639eb1SBalázs Kéri inline constexpr strong_ordering strong_ordering::equivalent(_EqResult::__equiv); 258*dd639eb1SBalázs Kéri inline constexpr strong_ordering strong_ordering::greater(_OrdResult::__greater); 259*dd639eb1SBalázs Kéri 260*dd639eb1SBalázs Kéri constexpr bool operator==(strong_ordering __v, _CmpUnspecifiedParam) noexcept { 261*dd639eb1SBalázs Kéri return __v.__value_ == 0; 262*dd639eb1SBalázs Kéri } 263*dd639eb1SBalázs Kéri constexpr bool operator!=(strong_ordering __v, _CmpUnspecifiedParam) noexcept { 264*dd639eb1SBalázs Kéri return __v.__value_ != 0; 265*dd639eb1SBalázs Kéri } 266*dd639eb1SBalázs Kéri constexpr bool operator<(strong_ordering __v, _CmpUnspecifiedParam) noexcept { 267*dd639eb1SBalázs Kéri return __v.__value_ < 0; 268*dd639eb1SBalázs Kéri } 269*dd639eb1SBalázs Kéri constexpr bool operator<=(strong_ordering __v, _CmpUnspecifiedParam) noexcept { 270*dd639eb1SBalázs Kéri return __v.__value_ <= 0; 271*dd639eb1SBalázs Kéri } 272*dd639eb1SBalázs Kéri constexpr bool operator>(strong_ordering __v, _CmpUnspecifiedParam) noexcept { 273*dd639eb1SBalázs Kéri return __v.__value_ > 0; 274*dd639eb1SBalázs Kéri } 275*dd639eb1SBalázs Kéri constexpr bool operator>=(strong_ordering __v, _CmpUnspecifiedParam) noexcept { 276*dd639eb1SBalázs Kéri return __v.__value_ >= 0; 277*dd639eb1SBalázs Kéri } 278*dd639eb1SBalázs Kéri constexpr bool operator==(_CmpUnspecifiedParam, strong_ordering __v) noexcept { 279*dd639eb1SBalázs Kéri return 0 == __v.__value_; 280*dd639eb1SBalázs Kéri } 281*dd639eb1SBalázs Kéri constexpr bool operator!=(_CmpUnspecifiedParam, strong_ordering __v) noexcept { 282*dd639eb1SBalázs Kéri return 0 != __v.__value_; 283*dd639eb1SBalázs Kéri } 284*dd639eb1SBalázs Kéri constexpr bool operator<(_CmpUnspecifiedParam, strong_ordering __v) noexcept { 285*dd639eb1SBalázs Kéri return 0 < __v.__value_; 286*dd639eb1SBalázs Kéri } 287*dd639eb1SBalázs Kéri constexpr bool operator<=(_CmpUnspecifiedParam, strong_ordering __v) noexcept { 288*dd639eb1SBalázs Kéri return 0 <= __v.__value_; 289*dd639eb1SBalázs Kéri } 290*dd639eb1SBalázs Kéri constexpr bool operator>(_CmpUnspecifiedParam, strong_ordering __v) noexcept { 291*dd639eb1SBalázs Kéri return 0 > __v.__value_; 292*dd639eb1SBalázs Kéri } 293*dd639eb1SBalázs Kéri constexpr bool operator>=(_CmpUnspecifiedParam, strong_ordering __v) noexcept { 294*dd639eb1SBalázs Kéri return 0 >= __v.__value_; 295*dd639eb1SBalázs Kéri } 296*dd639eb1SBalázs Kéri 297*dd639eb1SBalázs Kéri constexpr strong_ordering operator<=>(strong_ordering __v, _CmpUnspecifiedParam) noexcept { 298*dd639eb1SBalázs Kéri return __v; 299*dd639eb1SBalázs Kéri } 300*dd639eb1SBalázs Kéri constexpr strong_ordering operator<=>(_CmpUnspecifiedParam, strong_ordering __v) noexcept { 301*dd639eb1SBalázs Kéri return __v < 0 ? strong_ordering::greater : (__v > 0 ? strong_ordering::less : __v); 302*dd639eb1SBalázs Kéri } 303*dd639eb1SBalázs Kéri 304*dd639eb1SBalázs Kéri } // namespace __1 305*dd639eb1SBalázs Kéri } // end namespace std 306*dd639eb1SBalázs Kéri 307*dd639eb1SBalázs Kéri #endif // STD_COMPARE_H 308