1 //===----------------------------------------------------------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // UNSUPPORTED: c++03, c++11, c++14
12 // template <class T, class U> constexpr bool operator<= (const optional<T>& x, const optional<U>& y);
16 #include "test_macros.h"
23 constexpr X(int i
) : i_(i
) {}
26 constexpr bool operator<=(const X
& lhs
, const X
& rhs
) {
27 return lhs
.i_
<= rhs
.i_
;
30 int main(int, char**) {
32 typedef optional
<X
> O
;
34 constexpr O o1
; // disengaged
35 constexpr O o2
; // disengaged
36 constexpr O o3
{1}; // engaged
37 constexpr O o4
{2}; // engaged
38 constexpr O o5
{1}; // engaged
40 static_assert((o1
<= o1
), "");
41 static_assert((o1
<= o2
), "");
42 static_assert((o1
<= o3
), "");
43 static_assert((o1
<= o4
), "");
44 static_assert((o1
<= o5
), "");
46 static_assert((o2
<= o1
), "");
47 static_assert((o2
<= o2
), "");
48 static_assert((o2
<= o3
), "");
49 static_assert((o2
<= o4
), "");
50 static_assert((o2
<= o5
), "");
52 static_assert(!(o3
<= o1
), "");
53 static_assert(!(o3
<= o2
), "");
54 static_assert((o3
<= o3
), "");
55 static_assert((o3
<= o4
), "");
56 static_assert((o3
<= o5
), "");
58 static_assert(!(o4
<= o1
), "");
59 static_assert(!(o4
<= o2
), "");
60 static_assert(!(o4
<= o3
), "");
61 static_assert((o4
<= o4
), "");
62 static_assert(!(o4
<= o5
), "");
64 static_assert(!(o5
<= o1
), "");
65 static_assert(!(o5
<= o2
), "");
66 static_assert((o5
<= o3
), "");
67 static_assert((o5
<= o4
), "");
68 static_assert((o5
<= o5
), "");
71 using O1
= optional
<int>;
72 using O2
= optional
<long>;
74 static_assert(o1
<= O2(42), "");
75 static_assert(!(O2(101) <= o1
), "");
78 using O1
= optional
<int>;
79 using O2
= optional
<const int>;
81 static_assert(o1
<= O2(42), "");
82 static_assert(!(O2(101) <= o1
), "");