xref: /llvm-project/libcxx/test/std/utilities/optional/optional.nullops/compare.three_way.pass.cpp (revision 03cda77409023e64d6338dcb4e36bf1e40b33ea3)
1*03cda774SHristo Hristov //===----------------------------------------------------------------------===//
2*03cda774SHristo Hristov //
3*03cda774SHristo Hristov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*03cda774SHristo Hristov // See https://llvm.org/LICENSE.txt for license information.
5*03cda774SHristo Hristov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*03cda774SHristo Hristov //
7*03cda774SHristo Hristov //===----------------------------------------------------------------------===//
8*03cda774SHristo Hristov 
9*03cda774SHristo Hristov // UNSUPPORTED: c++03, c++11, c++14, c++17
10*03cda774SHristo Hristov 
11*03cda774SHristo Hristov // <optional>
12*03cda774SHristo Hristov 
13*03cda774SHristo Hristov // [optional.nullops], comparison with nullopt
14*03cda774SHristo Hristov 
15*03cda774SHristo Hristov // template<class T>
16*03cda774SHristo Hristov //   constexpr strong_ordering operator<=>(const optional<T>&, nullopt_t) noexcept;
17*03cda774SHristo Hristov 
18*03cda774SHristo Hristov #include <cassert>
19*03cda774SHristo Hristov #include <compare>
20*03cda774SHristo Hristov #include <optional>
21*03cda774SHristo Hristov 
22*03cda774SHristo Hristov #include "test_comparisons.h"
23*03cda774SHristo Hristov 
test()24*03cda774SHristo Hristov constexpr bool test() {
25*03cda774SHristo Hristov   {
26*03cda774SHristo Hristov     std::optional<int> op;
27*03cda774SHristo Hristov     assert((std::nullopt <=> op) == std::strong_ordering::equal);
28*03cda774SHristo Hristov     assert(testOrder(std::nullopt, op, std::strong_ordering::equal));
29*03cda774SHristo Hristov     assert((op <=> std::nullopt) == std::strong_ordering::equal);
30*03cda774SHristo Hristov     assert(testOrder(op, std::nullopt, std::strong_ordering::equal));
31*03cda774SHristo Hristov   }
32*03cda774SHristo Hristov   {
33*03cda774SHristo Hristov     std::optional<int> op{1};
34*03cda774SHristo Hristov     assert((std::nullopt <=> op) == std::strong_ordering::less);
35*03cda774SHristo Hristov     assert(testOrder(std::nullopt, op, std::strong_ordering::less));
36*03cda774SHristo Hristov   }
37*03cda774SHristo Hristov   {
38*03cda774SHristo Hristov     std::optional<int> op{1};
39*03cda774SHristo Hristov     assert((op <=> std::nullopt) == std::strong_ordering::greater);
40*03cda774SHristo Hristov     assert(testOrder(op, std::nullopt, std::strong_ordering::greater));
41*03cda774SHristo Hristov   }
42*03cda774SHristo Hristov 
43*03cda774SHristo Hristov   return true;
44*03cda774SHristo Hristov }
45*03cda774SHristo Hristov 
main(int,char **)46*03cda774SHristo Hristov int main(int, char**) {
47*03cda774SHristo Hristov   assert(test());
48*03cda774SHristo Hristov   static_assert(test());
49*03cda774SHristo Hristov   return 0;
50*03cda774SHristo Hristov }
51