File tree Expand file tree Collapse file tree 14 files changed +227
-59
lines changed Expand file tree Collapse file tree 14 files changed +227
-59
lines changed Original file line number Diff line number Diff line change @@ -1342,7 +1342,7 @@ template <
13421342_LIBCPP_HIDE_FROM_ABI constexpr bool operator <=(const _Tp& __v, const optional<_Up>& __x)
13431343# if _LIBCPP_STD_VER >= 26
13441344 requires (!__is_std_optional<_Tp>::value) && requires {
1345- { __v <= __x } -> __core_convertible_to<bool >;
1345+ { __v <= * __x } -> __core_convertible_to<bool >;
13461346 }
13471347# endif
13481348{
Original file line number Diff line number Diff line change 1414
1515#include < optional>
1616
17+ #include " test_comparisons.h"
1718#include " test_macros.h"
1819
20+ #if TEST_STD_VER >= 26
21+
22+ // Test SFINAE.
23+
24+ static_assert (HasOperatorEqual<int , std::optional<int >>);
25+ static_assert (HasOperatorEqual<int , std::optional<EqualityComparable>>);
26+ static_assert (HasOperatorEqual<EqualityComparable, std::optional<EqualityComparable>>);
27+
28+ static_assert (!HasOperatorEqual<NonComparable, std::optional<NonComparable>>);
29+ static_assert (!HasOperatorEqual<NonComparable, std::optional<EqualityComparable>>);
30+
31+
32+ static_assert (HasOperatorEqual<std::optional<int >, int >);
33+ static_assert (HasOperatorEqual<std::optional<EqualityComparable>, int >);
34+ static_assert (HasOperatorEqual<std::optional<EqualityComparable>, EqualityComparable>);
35+
36+ static_assert (!HasOperatorEqual<std::optional<NonComparable>,NonComparable>);
37+ static_assert (!HasOperatorEqual<std::optional<EqualityComparable>, NonComparable>);
38+
39+ #endif
40+
1941using std::optional;
2042
2143struct X {
Original file line number Diff line number Diff line change 1414
1515#include < optional>
1616
17+ #include " test_comparisons.h"
1718#include " test_macros.h"
1819
20+ #if TEST_STD_VER >= 26
21+
22+ // Test SFINAE.
23+ static_assert (HasOperatorGreaterThan<std::optional<ThreeWayComparable>, int >);
24+ static_assert (HasOperatorGreaterThan<std::optional<ThreeWayComparable>, ThreeWayComparable>);
25+
26+ static_assert (!HasOperatorGreaterThan<std::optional<NonComparable>, NonComparable>);
27+ static_assert (!HasOperatorGreaterThan<std::optional<ThreeWayComparable>, NonComparable>);
28+ static_assert (!HasOperatorGreaterThan<std::optional<NonComparable>, ThreeWayComparable>);
29+
30+ static_assert (HasOperatorGreaterThan<int , std::optional<ThreeWayComparable>>);
31+ static_assert (HasOperatorGreaterThan<ThreeWayComparable, std::optional<ThreeWayComparable>>);
32+
33+ static_assert (!HasOperatorGreaterThan<NonComparable, std::optional<NonComparable>>);
34+ static_assert (!HasOperatorGreaterThan<NonComparable, std::optional<ThreeWayComparable>>);
35+ static_assert (!HasOperatorGreaterThan<ThreeWayComparable, std::optional<NonComparable>>);
36+
37+ #endif
38+
1939using std::optional;
2040
2141struct X {
Original file line number Diff line number Diff line change 1414
1515#include < optional>
1616
17+ #include " test_comparisons.h"
1718#include " test_macros.h"
1819
20+ #if TEST_STD_VER >= 26
21+
22+ // Test SFINAE.
23+ static_assert (HasOperatorGreaterThanEqual<std::optional<ThreeWayComparable>, int >);
24+ static_assert (HasOperatorGreaterThanEqual<std::optional<ThreeWayComparable>, ThreeWayComparable>);
25+
26+ static_assert (!HasOperatorGreaterThanEqual<std::optional<NonComparable>, NonComparable>);
27+ static_assert (!HasOperatorGreaterThanEqual<std::optional<ThreeWayComparable>, NonComparable>);
28+ static_assert (!HasOperatorGreaterThanEqual<std::optional<NonComparable>, ThreeWayComparable>);
29+
30+ static_assert (HasOperatorGreaterThanEqual<int , std::optional<ThreeWayComparable>>);
31+ static_assert (HasOperatorGreaterThanEqual<ThreeWayComparable, std::optional<ThreeWayComparable>>);
32+
33+ static_assert (!HasOperatorGreaterThanEqual<NonComparable, std::optional<NonComparable>>);
34+ static_assert (!HasOperatorGreaterThanEqual<NonComparable, std::optional<ThreeWayComparable>>);
35+ static_assert (!HasOperatorGreaterThanEqual<ThreeWayComparable, std::optional<NonComparable>>);
36+
37+ #endif
38+
1939using std::optional;
2040
2141struct X {
Original file line number Diff line number Diff line change 1414
1515#include < optional>
1616
17+ #include " test_comparisons.h"
1718#include " test_macros.h"
1819
20+ #if TEST_STD_VER >= 26
21+
22+ // Test SFINAE.
23+ static_assert (HasOperatorLessThanEqual<std::optional<ThreeWayComparable>, int >);
24+ static_assert (HasOperatorLessThanEqual<std::optional<ThreeWayComparable>, ThreeWayComparable>);
25+
26+ static_assert (!HasOperatorLessThanEqual<std::optional<NonComparable>, NonComparable>);
27+ static_assert (!HasOperatorLessThanEqual<std::optional<ThreeWayComparable>, NonComparable>);
28+ static_assert (!HasOperatorLessThanEqual<std::optional<NonComparable>, ThreeWayComparable>);
29+
30+ static_assert (HasOperatorLessThanEqual<int , std::optional<ThreeWayComparable>>);
31+ static_assert (HasOperatorLessThanEqual<ThreeWayComparable, std::optional<ThreeWayComparable>>);
32+
33+ static_assert (!HasOperatorLessThanEqual<NonComparable, std::optional<NonComparable>>);
34+ static_assert (!HasOperatorLessThanEqual<NonComparable, std::optional<ThreeWayComparable>>);
35+ static_assert (!HasOperatorLessThanEqual<ThreeWayComparable, std::optional<NonComparable>>);
36+
37+ #endif
38+
1939using std::optional;
2040
2141struct X {
Original file line number Diff line number Diff line change 1414
1515#include < optional>
1616
17+ #include " test_comparisons.h"
1718#include " test_macros.h"
1819
20+ #if TEST_STD_VER >= 26
21+
22+ // Test SFINAE.
23+ static_assert (HasOperatorLessThan<std::optional<ThreeWayComparable>, int >);
24+ static_assert (HasOperatorLessThan<std::optional<ThreeWayComparable>, ThreeWayComparable>);
25+
26+ static_assert (!HasOperatorLessThan<std::optional<NonComparable>, NonComparable>);
27+ static_assert (!HasOperatorLessThan<std::optional<ThreeWayComparable>, NonComparable>);
28+ static_assert (!HasOperatorLessThan<std::optional<NonComparable>, ThreeWayComparable>);
29+
30+ static_assert (HasOperatorLessThan<int , std::optional<ThreeWayComparable>>);
31+ static_assert (HasOperatorLessThan<ThreeWayComparable, std::optional<ThreeWayComparable>>);
32+
33+ static_assert (!HasOperatorLessThan<NonComparable, std::optional<NonComparable>>);
34+ static_assert (!HasOperatorLessThan<NonComparable, std::optional<ThreeWayComparable>>);
35+ static_assert (!HasOperatorLessThan<ThreeWayComparable, std::optional<NonComparable>>);
36+
37+ #endif
38+
1939using std::optional;
2040
2141struct X {
Original file line number Diff line number Diff line change 1414
1515#include < optional>
1616
17+ #include " test_comparisons.h"
1718#include " test_macros.h"
1819
20+ #if TEST_STD_VER >= 26
21+
22+ // Test SFINAE.
23+
24+ static_assert (HasOperatorNotEqual<int , std::optional<int >>);
25+ static_assert (HasOperatorNotEqual<int , std::optional<EqualityComparable>>);
26+ static_assert (HasOperatorNotEqual<EqualityComparable, std::optional<EqualityComparable>>);
27+
28+ static_assert (!HasOperatorNotEqual<NonComparable, std::optional<NonComparable>>);
29+ static_assert (!HasOperatorNotEqual<NonComparable, std::optional<EqualityComparable>>);
30+
31+
32+ static_assert (HasOperatorNotEqual<std::optional<int >, int >);
33+ static_assert (HasOperatorNotEqual<std::optional<EqualityComparable>, int >);
34+ static_assert (HasOperatorNotEqual<std::optional<EqualityComparable>, EqualityComparable>);
35+
36+ static_assert (!HasOperatorNotEqual<std::optional<NonComparable>,NonComparable>);
37+ static_assert (!HasOperatorNotEqual<std::optional<EqualityComparable>, NonComparable>);
38+
39+ #endif
40+
1941using std::optional;
2042
2143struct X {
Original file line number Diff line number Diff line change 1515#include < type_traits>
1616#include < cassert>
1717
18- #include " test_macros.h"
1918#include " test_comparisons.h"
19+ #include " test_macros.h"
20+
21+ #if TEST_STD_VER >= 26
2022
2123// Test SFINAE.
2224
23- static_assert (HasOperatorEqual<std::optional<int >, std::optional<int >>);
24- static_assert (HasOperatorEqual<std::optional<EqualityComparable>, std::optional<EqualityComparable>>);
25+ static_assert (HasOperatorEqual<std::optional<int >>);
26+ static_assert (HasOperatorEqual<std::optional<EqualityComparable>>);
27+ static_assert (HasOperatorEqual<std::optional<EqualityComparable>, std::optional<int >>);
28+
29+ static_assert (!HasOperatorEqual<std::optional<NonComparable>>);
30+ static_assert (!HasOperatorEqual<std::optional<EqualityComparable>, std::optional<NonComparable>>);
31+
32+ #endif
2533
2634using std::optional;
2735
Original file line number Diff line number Diff line change 1313
1414#include < optional>
1515
16+ #include " test_comparisons.h"
1617#include " test_macros.h"
1718
19+ #if TEST_STD_VER >= 26
20+
21+ // Test SFINAE.
22+ static_assert (HasOperatorGreaterThanEqual<std::optional<ThreeWayComparable>>);
23+ static_assert (HasOperatorGreaterThanEqual<std::optional<ThreeWayComparable>, std::optional<int >>);
24+
25+ static_assert (!HasOperatorGreaterThanEqual<std::optional<NonComparable>>);
26+ static_assert (!HasOperatorGreaterThanEqual<std::optional<EqualityComparable>>);
27+ static_assert (!HasOperatorGreaterThanEqual<std::optional<ThreeWayComparable>, std::optional<NonComparable>>);
28+
29+ #endif
30+
1831using std::optional;
1932
2033struct X {
Original file line number Diff line number Diff line change 1313
1414#include < optional>
1515
16+ #include " test_comparisons.h"
1617#include " test_macros.h"
1718
19+ #if TEST_STD_VER >= 26
20+
21+ // Test SFINAE.
22+ static_assert (HasOperatorGreaterThan<std::optional<ThreeWayComparable>>);
23+ static_assert (HasOperatorGreaterThan<std::optional<ThreeWayComparable>, std::optional<int >>);
24+
25+ static_assert (!HasOperatorGreaterThan<std::optional<NonComparable>>);
26+ static_assert (!HasOperatorGreaterThan<std::optional<EqualityComparable>>);
27+ static_assert (!HasOperatorGreaterThan<std::optional<ThreeWayComparable>, std::optional<NonComparable>>);
28+
29+ #endif
30+
1831using std::optional;
1932
2033struct X {
You can’t perform that action at this time.
0 commit comments