xref: /llvm-project/clang/test/ASTMerge/cxx-rewritten-binary-operator/Inputs/std-compare.h (revision dd639eb15aacfc865409915516f52385c4381923)
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