less_than.pass.cpp revision 2faa02fc3d44e081fb7e3f36b19de622959aeb8c
1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <optional>
11
12// template <class T> constexpr bool operator< (const optional<T>& x, const optional<T>& y);
13
14#include <optional>
15
16#if _LIBCPP_STD_VER > 11
17
18struct X
19{
20    int i_;
21
22    constexpr X(int i) : i_(i) {}
23};
24
25constexpr bool operator < ( const X &rhs, const X &lhs )
26    { return rhs.i_ < lhs.i_ ; }
27
28#endif
29
30int main()
31{
32#if _LIBCPP_STD_VER > 11
33    {
34    typedef std::optional<X> O;
35
36    constexpr O o1;     // disengaged
37    constexpr O o2;     // disengaged
38    constexpr O o3{1};  // engaged
39    constexpr O o4{2};  // engaged
40    constexpr O o5{1};  // engaged
41
42    static_assert ( !(o1 < o1), "" );
43    static_assert ( !(o1 < o2), "" );
44    static_assert (   o1 < o3 , "" );
45    static_assert (   o1 < o4 , "" );
46    static_assert (   o1 < o5 , "" );
47
48    static_assert ( !(o2 < o1), "" );
49    static_assert ( !(o2 < o2), "" );
50    static_assert (   o2 < o3 , "" );
51    static_assert (   o2 < o4 , "" );
52    static_assert (   o2 < o5 , "" );
53
54    static_assert ( !(o3 < o1), "" );
55    static_assert ( !(o3 < o2), "" );
56    static_assert ( !(o3 < o3), "" );
57    static_assert (   o3 < o4 , "" );
58    static_assert ( !(o3 < o5), "" );
59
60    static_assert ( !(o4 < o1), "" );
61    static_assert ( !(o4 < o2), "" );
62    static_assert ( !(o4 < o3), "" );
63    static_assert ( !(o4 < o4), "" );
64    static_assert ( !(o4 < o5), "" );
65
66    static_assert ( !(o5 < o1), "" );
67    static_assert ( !(o5 < o2), "" );
68    static_assert ( !(o5 < o3), "" );
69    static_assert (   o5 < o4 , "" );
70    static_assert ( !(o5 < o5), "" );
71    }
72#endif
73}
74