| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,58 @@ | ||
| //===----------------------------------------------------------------------===// | ||
| // | ||
| // The LLVM Compiler Infrastructure | ||
| // | ||
| // This file is dual licensed under the MIT and the University of Illinois Open | ||
| // Source Licenses. See LICENSE.TXT for details. | ||
| // | ||
| //===----------------------------------------------------------------------===// | ||
|
|
||
| // <optional> | ||
|
|
||
| // template <class T> constexpr bool operator!=(const optional<T>& x, const T& v); | ||
| // template <class T> constexpr bool operator!=(const T& v, const optional<T>& x); | ||
|
|
||
| #include <experimental/optional> | ||
|
|
||
| #if _LIBCPP_STD_VER > 11 | ||
|
|
||
| using std::experimental::optional; | ||
|
|
||
| struct X | ||
| { | ||
| int i_; | ||
|
|
||
| constexpr X(int i) : i_(i) {} | ||
| }; | ||
|
|
||
| constexpr bool operator == ( const X &lhs, const X &rhs ) | ||
| { return lhs.i_ == rhs.i_ ; } | ||
|
|
||
| #endif | ||
|
|
||
| int main() | ||
| { | ||
| #if _LIBCPP_STD_VER > 11 | ||
| { | ||
| typedef X T; | ||
| typedef optional<T> O; | ||
|
|
||
| constexpr T val(2); | ||
| constexpr O o1; // disengaged | ||
| constexpr O o2{1}; // engaged | ||
| constexpr O o3{val}; // engaged | ||
|
|
||
| static_assert ( (o1 != T(1)), "" ); | ||
| static_assert ( !(o2 != T(1)), "" ); | ||
| static_assert ( (o3 != T(1)), "" ); | ||
| static_assert ( !(o3 != T(2)), "" ); | ||
| static_assert ( !(o3 != val), "" ); | ||
|
|
||
| static_assert ( (T(1) != o1), "" ); | ||
| static_assert ( !(T(1) != o2), "" ); | ||
| static_assert ( (T(1) != o3), "" ); | ||
| static_assert ( !(T(2) != o3), "" ); | ||
| static_assert ( !(val != o3), "" ); | ||
| } | ||
| #endif | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| //===----------------------------------------------------------------------===// | ||
| // | ||
| // The LLVM Compiler Infrastructure | ||
| // | ||
| // This file is dual licensed under the MIT and the University of Illinois Open | ||
| // Source Licenses. See LICENSE.TXT for details. | ||
| // | ||
| //===----------------------------------------------------------------------===// | ||
|
|
||
|
|
||
| // <optional> | ||
|
|
||
| // template <class T> constexpr bool operator>(const optional<T>& x, nullopt_t) noexcept; | ||
| // template <class T> constexpr bool operator>(nullopt_t, const optional<T>& x) noexcept; | ||
|
|
||
| #include <experimental/optional> | ||
|
|
||
| int main() | ||
| { | ||
| #if _LIBCPP_STD_VER > 11 | ||
| using std::experimental::optional; | ||
| using std::experimental::nullopt_t; | ||
| using std::experimental::nullopt; | ||
|
|
||
| { | ||
| typedef int T; | ||
| typedef optional<T> O; | ||
|
|
||
| constexpr O o1; // disengaged | ||
| constexpr O o2{1}; // engaged | ||
|
|
||
| static_assert ( !(nullopt > o1), "" ); | ||
| static_assert ( !(nullopt > o2), "" ); | ||
| static_assert ( !(o1 > nullopt), "" ); | ||
| static_assert ( (o2 > nullopt), "" ); | ||
|
|
||
| static_assert (noexcept(nullopt > o1), ""); | ||
| static_assert (noexcept(o1 > nullopt), ""); | ||
| } | ||
| #endif | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| //===----------------------------------------------------------------------===// | ||
| // | ||
| // The LLVM Compiler Infrastructure | ||
| // | ||
| // This file is dual licensed under the MIT and the University of Illinois Open | ||
| // Source Licenses. See LICENSE.TXT for details. | ||
| // | ||
| //===----------------------------------------------------------------------===// | ||
|
|
||
|
|
||
| // <optional> | ||
|
|
||
| // template <class T> constexpr bool operator>=(const optional<T>& x, nullopt_t) noexcept; | ||
| // template <class T> constexpr bool operator>=(nullopt_t, const optional<T>& x) noexcept; | ||
|
|
||
| #include <experimental/optional> | ||
|
|
||
| int main() | ||
| { | ||
| #if _LIBCPP_STD_VER > 11 | ||
| using std::experimental::optional; | ||
| using std::experimental::nullopt_t; | ||
| using std::experimental::nullopt; | ||
|
|
||
| { | ||
| typedef int T; | ||
| typedef optional<T> O; | ||
|
|
||
| constexpr O o1; // disengaged | ||
| constexpr O o2{1}; // engaged | ||
|
|
||
| static_assert ( (nullopt >= o1), "" ); | ||
| static_assert ( !(nullopt >= o2), "" ); | ||
| static_assert ( (o1 >= nullopt), "" ); | ||
| static_assert ( (o2 >= nullopt), "" ); | ||
|
|
||
| static_assert (noexcept(nullopt >= o1), ""); | ||
| static_assert (noexcept(o1 >= nullopt), ""); | ||
| } | ||
| #endif | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| //===----------------------------------------------------------------------===// | ||
| // | ||
| // The LLVM Compiler Infrastructure | ||
| // | ||
| // This file is dual licensed under the MIT and the University of Illinois Open | ||
| // Source Licenses. See LICENSE.TXT for details. | ||
| // | ||
| //===----------------------------------------------------------------------===// | ||
|
|
||
|
|
||
| // <optional> | ||
|
|
||
| // template <class T> constexpr bool operator<=(const optional<T>& x, nullopt_t) noexcept; | ||
| // template <class T> constexpr bool operator<=(nullopt_t, const optional<T>& x) noexcept; | ||
|
|
||
| #include <experimental/optional> | ||
|
|
||
| int main() | ||
| { | ||
| #if _LIBCPP_STD_VER > 11 | ||
| using std::experimental::optional; | ||
| using std::experimental::nullopt_t; | ||
| using std::experimental::nullopt; | ||
|
|
||
| { | ||
| typedef int T; | ||
| typedef optional<T> O; | ||
|
|
||
| constexpr O o1; // disengaged | ||
| constexpr O o2{1}; // engaged | ||
|
|
||
| static_assert ( (nullopt <= o1), "" ); | ||
| static_assert ( (nullopt <= o2), "" ); | ||
| static_assert ( (o1 <= nullopt), "" ); | ||
| static_assert ( !(o2 <= nullopt), "" ); | ||
|
|
||
| static_assert (noexcept(nullopt <= o1), ""); | ||
| static_assert (noexcept(o1 <= nullopt), ""); | ||
| } | ||
| #endif | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| //===----------------------------------------------------------------------===// | ||
| // | ||
| // The LLVM Compiler Infrastructure | ||
| // | ||
| // This file is dual licensed under the MIT and the University of Illinois Open | ||
| // Source Licenses. See LICENSE.TXT for details. | ||
| // | ||
| //===----------------------------------------------------------------------===// | ||
|
|
||
|
|
||
| // <optional> | ||
|
|
||
| // template <class T> constexpr bool operator!=(const optional<T>& x, nullopt_t) noexcept; | ||
| // template <class T> constexpr bool operator!=(nullopt_t, const optional<T>& x) noexcept; | ||
|
|
||
| #include <experimental/optional> | ||
|
|
||
| int main() | ||
| { | ||
| #if _LIBCPP_STD_VER > 11 | ||
| using std::experimental::optional; | ||
| using std::experimental::nullopt_t; | ||
| using std::experimental::nullopt; | ||
|
|
||
| { | ||
| typedef int T; | ||
| typedef optional<T> O; | ||
|
|
||
| constexpr O o1; // disengaged | ||
| constexpr O o2{1}; // engaged | ||
|
|
||
| static_assert ( !(nullopt != o1), "" ); | ||
| static_assert ( (nullopt != o2), "" ); | ||
| static_assert ( !(o1 != nullopt), "" ); | ||
| static_assert ( (o2 != nullopt), "" ); | ||
|
|
||
| static_assert (noexcept(nullopt != o1), ""); | ||
| static_assert (noexcept(o1 != nullopt), ""); | ||
| } | ||
| #endif | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,75 @@ | ||
| //===----------------------------------------------------------------------===// | ||
| // | ||
| // The LLVM Compiler Infrastructure | ||
| // | ||
| // This file is dual licensed under the MIT and the University of Illinois Open | ||
| // Source Licenses. See LICENSE.TXT for details. | ||
| // | ||
| //===----------------------------------------------------------------------===// | ||
|
|
||
| // <optional> | ||
|
|
||
| // template <class T> constexpr bool operator>= (const optional<T>& x, const optional<T>& y); | ||
|
|
||
| #include <experimental/optional> | ||
|
|
||
| #if _LIBCPP_STD_VER > 11 | ||
|
|
||
| using std::experimental::optional; | ||
|
|
||
| struct X | ||
| { | ||
| int i_; | ||
|
|
||
| constexpr X(int i) : i_(i) {} | ||
| }; | ||
|
|
||
| constexpr bool operator < ( const X &lhs, const X &rhs ) | ||
| { return lhs.i_ < rhs.i_ ; } | ||
|
|
||
| #endif | ||
|
|
||
| int main() | ||
| { | ||
| #if _LIBCPP_STD_VER > 11 | ||
| { | ||
| typedef optional<X> O; | ||
|
|
||
| constexpr O o1; // disengaged | ||
| constexpr O o2; // disengaged | ||
| constexpr O o3{1}; // engaged | ||
| constexpr O o4{2}; // engaged | ||
| constexpr O o5{1}; // engaged | ||
|
|
||
| static_assert ( (o1 >= o1), "" ); | ||
| static_assert ( (o1 >= o2), "" ); | ||
| static_assert ( !(o1 >= o3), "" ); | ||
| static_assert ( !(o1 >= o4), "" ); | ||
| static_assert ( !(o1 >= o5), "" ); | ||
|
|
||
| static_assert ( (o2 >= o1), "" ); | ||
| static_assert ( (o2 >= o2), "" ); | ||
| static_assert ( !(o2 >= o3), "" ); | ||
| static_assert ( !(o2 >= o4), "" ); | ||
| static_assert ( !(o2 >= o5), "" ); | ||
|
|
||
| static_assert ( (o3 >= o1), "" ); | ||
| static_assert ( (o3 >= o2), "" ); | ||
| static_assert ( (o3 >= o3), "" ); | ||
| static_assert ( !(o3 >= o4), "" ); | ||
| static_assert ( (o3 >= o5), "" ); | ||
|
|
||
| static_assert ( (o4 >= o1), "" ); | ||
| static_assert ( (o4 >= o2), "" ); | ||
| static_assert ( (o4 >= o3), "" ); | ||
| static_assert ( (o4 >= o4), "" ); | ||
| static_assert ( (o4 >= o5), "" ); | ||
|
|
||
| static_assert ( (o5 >= o1), "" ); | ||
| static_assert ( (o5 >= o2), "" ); | ||
| static_assert ( (o5 >= o3), "" ); | ||
| static_assert ( !(o5 >= o4), "" ); | ||
| static_assert ( (o5 >= o5), "" ); | ||
| } | ||
| #endif | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,75 @@ | ||
| //===----------------------------------------------------------------------===// | ||
| // | ||
| // The LLVM Compiler Infrastructure | ||
| // | ||
| // This file is dual licensed under the MIT and the University of Illinois Open | ||
| // Source Licenses. See LICENSE.TXT for details. | ||
| // | ||
| //===----------------------------------------------------------------------===// | ||
|
|
||
| // <optional> | ||
|
|
||
| // template <class T> constexpr bool operator> (const optional<T>& x, const optional<T>& y); | ||
|
|
||
| #include <experimental/optional> | ||
|
|
||
| #if _LIBCPP_STD_VER > 11 | ||
|
|
||
| using std::experimental::optional; | ||
|
|
||
| struct X | ||
| { | ||
| int i_; | ||
|
|
||
| constexpr X(int i) : i_(i) {} | ||
| }; | ||
|
|
||
| constexpr bool operator < ( const X &lhs, const X &rhs ) | ||
| { return lhs.i_ < rhs.i_ ; } | ||
|
|
||
| #endif | ||
|
|
||
| int main() | ||
| { | ||
| #if _LIBCPP_STD_VER > 11 | ||
| { | ||
| typedef optional<X> O; | ||
|
|
||
| constexpr O o1; // disengaged | ||
| constexpr O o2; // disengaged | ||
| constexpr O o3{1}; // engaged | ||
| constexpr O o4{2}; // engaged | ||
| constexpr O o5{1}; // engaged | ||
|
|
||
| static_assert ( !(o1 > o1), "" ); | ||
| static_assert ( !(o1 > o2), "" ); | ||
| static_assert ( !(o1 > o3), "" ); | ||
| static_assert ( !(o1 > o4), "" ); | ||
| static_assert ( !(o1 > o5), "" ); | ||
|
|
||
| static_assert ( !(o2 > o1), "" ); | ||
| static_assert ( !(o2 > o2), "" ); | ||
| static_assert ( !(o2 > o3), "" ); | ||
| static_assert ( !(o2 > o4), "" ); | ||
| static_assert ( !(o2 > o5), "" ); | ||
|
|
||
| static_assert ( (o3 > o1), "" ); | ||
| static_assert ( (o3 > o2), "" ); | ||
| static_assert ( !(o3 > o3), "" ); | ||
| static_assert ( !(o3 > o4), "" ); | ||
| static_assert ( !(o3 > o5), "" ); | ||
|
|
||
| static_assert ( (o4 > o1), "" ); | ||
| static_assert ( (o4 > o2), "" ); | ||
| static_assert ( (o4 > o3), "" ); | ||
| static_assert ( !(o4 > o4), "" ); | ||
| static_assert ( (o4 > o5), "" ); | ||
|
|
||
| static_assert ( (o5 > o1), "" ); | ||
| static_assert ( (o5 > o2), "" ); | ||
| static_assert ( !(o5 > o3), "" ); | ||
| static_assert ( !(o5 > o4), "" ); | ||
| static_assert ( !(o5 > o5), "" ); | ||
| } | ||
| #endif | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,75 @@ | ||
| //===----------------------------------------------------------------------===// | ||
| // | ||
| // The LLVM Compiler Infrastructure | ||
| // | ||
| // This file is dual licensed under the MIT and the University of Illinois Open | ||
| // Source Licenses. See LICENSE.TXT for details. | ||
| // | ||
| //===----------------------------------------------------------------------===// | ||
|
|
||
| // <optional> | ||
|
|
||
| // template <class T> constexpr bool operator<= (const optional<T>& x, const optional<T>& y); | ||
|
|
||
| #include <experimental/optional> | ||
|
|
||
| #if _LIBCPP_STD_VER > 11 | ||
|
|
||
| using std::experimental::optional; | ||
|
|
||
| struct X | ||
| { | ||
| int i_; | ||
|
|
||
| constexpr X(int i) : i_(i) {} | ||
| }; | ||
|
|
||
| constexpr bool operator < ( const X &lhs, const X &rhs ) | ||
| { return lhs.i_ < rhs.i_ ; } | ||
|
|
||
| #endif | ||
|
|
||
| int main() | ||
| { | ||
| #if _LIBCPP_STD_VER > 11 | ||
| { | ||
| typedef optional<X> O; | ||
|
|
||
| constexpr O o1; // disengaged | ||
| constexpr O o2; // disengaged | ||
| constexpr O o3{1}; // engaged | ||
| constexpr O o4{2}; // engaged | ||
| constexpr O o5{1}; // engaged | ||
|
|
||
| static_assert ( (o1 <= o1), "" ); | ||
| static_assert ( (o1 <= o2), "" ); | ||
| static_assert ( (o1 <= o3), "" ); | ||
| static_assert ( (o1 <= o4), "" ); | ||
| static_assert ( (o1 <= o5), "" ); | ||
|
|
||
| static_assert ( (o2 <= o1), "" ); | ||
| static_assert ( (o2 <= o2), "" ); | ||
| static_assert ( (o2 <= o3), "" ); | ||
| static_assert ( (o2 <= o4), "" ); | ||
| static_assert ( (o2 <= o5), "" ); | ||
|
|
||
| static_assert ( !(o3 <= o1), "" ); | ||
| static_assert ( !(o3 <= o2), "" ); | ||
| static_assert ( (o3 <= o3), "" ); | ||
| static_assert ( (o3 <= o4), "" ); | ||
| static_assert ( (o3 <= o5), "" ); | ||
|
|
||
| static_assert ( !(o4 <= o1), "" ); | ||
| static_assert ( !(o4 <= o2), "" ); | ||
| static_assert ( !(o4 <= o3), "" ); | ||
| static_assert ( (o4 <= o4), "" ); | ||
| static_assert ( !(o4 <= o5), "" ); | ||
|
|
||
| static_assert ( !(o5 <= o1), "" ); | ||
| static_assert ( !(o5 <= o2), "" ); | ||
| static_assert ( (o5 <= o3), "" ); | ||
| static_assert ( (o5 <= o4), "" ); | ||
| static_assert ( (o5 <= o5), "" ); | ||
| } | ||
| #endif | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,79 @@ | ||
| //===----------------------------------------------------------------------===// | ||
| // | ||
| // The LLVM Compiler Infrastructure | ||
| // | ||
| // This file is dual licensed under the MIT and the University of Illinois Open | ||
| // Source Licenses. See LICENSE.TXT for details. | ||
| // | ||
| //===----------------------------------------------------------------------===// | ||
|
|
||
| // <optional> | ||
|
|
||
| // template <class T> constexpr bool operator!=(const optional<T>& x, const optional<T>& y); | ||
|
|
||
| #include <experimental/optional> | ||
| #include <type_traits> | ||
| #include <cassert> | ||
|
|
||
| #if _LIBCPP_STD_VER > 11 | ||
|
|
||
| using std::experimental::optional; | ||
|
|
||
| struct X | ||
| { | ||
| int i_; | ||
|
|
||
| constexpr X(int i) : i_(i) {} | ||
| }; | ||
|
|
||
| constexpr bool operator == ( const X &lhs, const X &rhs ) | ||
| { return lhs.i_ == rhs.i_ ; } | ||
|
|
||
| #endif | ||
|
|
||
| int main() | ||
| { | ||
| #if _LIBCPP_STD_VER > 11 | ||
| { | ||
| typedef X T; | ||
| typedef optional<T> O; | ||
|
|
||
| constexpr O o1; // disengaged | ||
| constexpr O o2; // disengaged | ||
| constexpr O o3{1}; // engaged | ||
| constexpr O o4{2}; // engaged | ||
| constexpr O o5{1}; // engaged | ||
|
|
||
| static_assert ( !(o1 != o1), "" ); | ||
| static_assert ( !(o1 != o2), "" ); | ||
| static_assert ( (o1 != o3), "" ); | ||
| static_assert ( (o1 != o4), "" ); | ||
| static_assert ( (o1 != o5), "" ); | ||
|
|
||
| static_assert ( !(o2 != o1), "" ); | ||
| static_assert ( !(o2 != o2), "" ); | ||
| static_assert ( (o2 != o3), "" ); | ||
| static_assert ( (o2 != o4), "" ); | ||
| static_assert ( (o2 != o5), "" ); | ||
|
|
||
| static_assert ( (o3 != o1), "" ); | ||
| static_assert ( (o3 != o2), "" ); | ||
| static_assert ( !(o3 != o3), "" ); | ||
| static_assert ( (o3 != o4), "" ); | ||
| static_assert ( !(o3 != o5), "" ); | ||
|
|
||
| static_assert ( (o4 != o1), "" ); | ||
| static_assert ( (o4 != o2), "" ); | ||
| static_assert ( (o4 != o3), "" ); | ||
| static_assert ( !(o4 != o4), "" ); | ||
| static_assert ( (o4 != o5), "" ); | ||
|
|
||
| static_assert ( (o5 != o1), "" ); | ||
| static_assert ( (o5 != o2), "" ); | ||
| static_assert ( !(o5 != o3), "" ); | ||
| static_assert ( (o5 != o4), "" ); | ||
| static_assert ( !(o5 != o5), "" ); | ||
|
|
||
| } | ||
| #endif | ||
| } |