mirror of
https://github.com/intel/llvm.git
synced 2026-01-21 20:53:29 +08:00
[libc++] Restore __synth_three_way lambda (#90398)
Restore `__synth_three_way` lambda to match the Standard.
GH-57222 is done, restoring the Standard wording implementation should
be possible.
df28d4412c/libcxx/include/__compare/synth_three_way.h (L28)
According to comment
https://github.com/llvm/llvm-project/issues/59513#issuecomment-2068338762,
GH-59513 is not a blocker.
Co-authored-by: Hristo Hristov <zingam@outlook.com>
This commit is contained in:
@@ -25,12 +25,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD
|
||||
|
||||
// [expos.only.func]
|
||||
|
||||
// TODO MODULES restore the lamba to match the Standard.
|
||||
// See https://github.com/llvm/llvm-project/issues/57222
|
||||
//_LIBCPP_HIDE_FROM_ABI inline constexpr auto __synth_three_way =
|
||||
// []<class _Tp, class _Up>(const _Tp& __t, const _Up& __u)
|
||||
template <class _Tp, class _Up>
|
||||
_LIBCPP_HIDE_FROM_ABI constexpr auto __synth_three_way(const _Tp& __t, const _Up& __u)
|
||||
_LIBCPP_HIDE_FROM_ABI inline constexpr auto __synth_three_way = []<class _Tp, class _Up>(const _Tp& __t, const _Up& __u)
|
||||
requires requires {
|
||||
{ __t < __u } -> __boolean_testable;
|
||||
{ __u < __t } -> __boolean_testable;
|
||||
@@ -45,7 +40,7 @@ _LIBCPP_HIDE_FROM_ABI constexpr auto __synth_three_way(const _Tp& __t, const _Up
|
||||
return weak_ordering::greater;
|
||||
return weak_ordering::equivalent;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
template <class _Tp, class _Up = _Tp>
|
||||
using __synth_three_way_result = decltype(std::__synth_three_way(std::declval<_Tp&>(), std::declval<_Up&>()));
|
||||
|
||||
@@ -423,7 +423,7 @@ template <class _Tp, size_t _Size>
|
||||
_LIBCPP_HIDE_FROM_ABI constexpr __synth_three_way_result<_Tp>
|
||||
operator<=>(const array<_Tp, _Size>& __x, const array<_Tp, _Size>& __y) {
|
||||
return std::lexicographical_compare_three_way(
|
||||
__x.begin(), __x.end(), __y.begin(), __y.end(), std::__synth_three_way<_Tp, _Tp>);
|
||||
__x.begin(), __x.end(), __y.begin(), __y.end(), std::__synth_three_way);
|
||||
}
|
||||
|
||||
#endif // _LIBCPP_STD_VER <= 17
|
||||
|
||||
@@ -2531,7 +2531,7 @@ template <class _Tp, class _Allocator>
|
||||
_LIBCPP_HIDE_FROM_ABI __synth_three_way_result<_Tp>
|
||||
operator<=>(const deque<_Tp, _Allocator>& __x, const deque<_Tp, _Allocator>& __y) {
|
||||
return std::lexicographical_compare_three_way(
|
||||
__x.begin(), __x.end(), __y.begin(), __y.end(), std::__synth_three_way<_Tp, _Tp>);
|
||||
__x.begin(), __x.end(), __y.begin(), __y.end(), std::__synth_three_way);
|
||||
}
|
||||
|
||||
#endif // _LIBCPP_STD_VER <= 17
|
||||
|
||||
@@ -1518,7 +1518,7 @@ template <class _Tp, class _Allocator>
|
||||
_LIBCPP_HIDE_FROM_ABI __synth_three_way_result<_Tp>
|
||||
operator<=>(const forward_list<_Tp, _Allocator>& __x, const forward_list<_Tp, _Allocator>& __y) {
|
||||
return std::lexicographical_compare_three_way(
|
||||
__x.begin(), __x.end(), __y.begin(), __y.end(), std::__synth_three_way<_Tp, _Tp>);
|
||||
__x.begin(), __x.end(), __y.begin(), __y.end(), std::__synth_three_way);
|
||||
}
|
||||
|
||||
#endif // #if _LIBCPP_STD_VER <= 17
|
||||
|
||||
@@ -1680,7 +1680,7 @@ template <class _Tp, class _Allocator>
|
||||
_LIBCPP_HIDE_FROM_ABI __synth_three_way_result<_Tp>
|
||||
operator<=>(const list<_Tp, _Allocator>& __x, const list<_Tp, _Allocator>& __y) {
|
||||
return std::lexicographical_compare_three_way(
|
||||
__x.begin(), __x.end(), __y.begin(), __y.end(), std::__synth_three_way<_Tp, _Tp>);
|
||||
__x.begin(), __x.end(), __y.begin(), __y.end(), std::__synth_three_way);
|
||||
}
|
||||
|
||||
#endif // _LIBCPP_STD_VER <= 17
|
||||
|
||||
@@ -1617,12 +1617,7 @@ operator<=(const map<_Key, _Tp, _Compare, _Allocator>& __x, const map<_Key, _Tp,
|
||||
template <class _Key, class _Tp, class _Compare, class _Allocator>
|
||||
_LIBCPP_HIDE_FROM_ABI __synth_three_way_result<pair<const _Key, _Tp>>
|
||||
operator<=>(const map<_Key, _Tp, _Compare, _Allocator>& __x, const map<_Key, _Tp, _Compare, _Allocator>& __y) {
|
||||
return std::lexicographical_compare_three_way(
|
||||
__x.begin(),
|
||||
__x.end(),
|
||||
__y.begin(),
|
||||
__y.end(),
|
||||
std::__synth_three_way<pair<const _Key, _Tp>, pair<const _Key, _Tp>>);
|
||||
return std::lexicographical_compare_three_way(__x.begin(), __x.end(), __y.begin(), __y.end(), std::__synth_three_way);
|
||||
}
|
||||
|
||||
#endif // #if _LIBCPP_STD_VER <= 17
|
||||
@@ -2136,12 +2131,7 @@ template <class _Key, class _Tp, class _Compare, class _Allocator>
|
||||
_LIBCPP_HIDE_FROM_ABI __synth_three_way_result<pair<const _Key, _Tp>>
|
||||
operator<=>(const multimap<_Key, _Tp, _Compare, _Allocator>& __x,
|
||||
const multimap<_Key, _Tp, _Compare, _Allocator>& __y) {
|
||||
return std::lexicographical_compare_three_way(
|
||||
__x.begin(),
|
||||
__x.end(),
|
||||
__y.begin(),
|
||||
__y.end(),
|
||||
std::__synth_three_way<pair<const _Key, _Tp>, pair<const _Key, _Tp>>);
|
||||
return std::lexicographical_compare_three_way(__x.begin(), __x.end(), __y.begin(), __y.end(), __synth_three_way);
|
||||
}
|
||||
|
||||
#endif // #if _LIBCPP_STD_VER <= 17
|
||||
|
||||
@@ -993,8 +993,7 @@ operator<=(const set<_Key, _Compare, _Allocator>& __x, const set<_Key, _Compare,
|
||||
template <class _Key, class _Allocator>
|
||||
_LIBCPP_HIDE_FROM_ABI __synth_three_way_result<_Key>
|
||||
operator<=>(const set<_Key, _Allocator>& __x, const set<_Key, _Allocator>& __y) {
|
||||
return std::lexicographical_compare_three_way(
|
||||
__x.begin(), __x.end(), __y.begin(), __y.end(), std::__synth_three_way<_Key, _Key>);
|
||||
return std::lexicographical_compare_three_way(__x.begin(), __x.end(), __y.begin(), __y.end(), std::__synth_three_way);
|
||||
}
|
||||
|
||||
#endif // _LIBCPP_STD_VER <= 17
|
||||
@@ -1454,7 +1453,7 @@ template <class _Key, class _Allocator>
|
||||
_LIBCPP_HIDE_FROM_ABI __synth_three_way_result<_Key>
|
||||
operator<=>(const multiset<_Key, _Allocator>& __x, const multiset<_Key, _Allocator>& __y) {
|
||||
return std::lexicographical_compare_three_way(
|
||||
__x.begin(), __x.end(), __y.begin(), __y.end(), std::__synth_three_way<_Key, _Key>);
|
||||
__x.begin(), __x.end(), __y.begin(), __y.end(), __synth_three_way);
|
||||
}
|
||||
|
||||
#endif // _LIBCPP_STD_VER <= 17
|
||||
|
||||
@@ -2903,7 +2903,7 @@ template <class _Tp, class _Allocator>
|
||||
_LIBCPP_HIDE_FROM_ABI constexpr __synth_three_way_result<_Tp>
|
||||
operator<=>(const vector<_Tp, _Allocator>& __x, const vector<_Tp, _Allocator>& __y) {
|
||||
return std::lexicographical_compare_three_way(
|
||||
__x.begin(), __x.end(), __y.begin(), __y.end(), std::__synth_three_way<_Tp, _Tp>);
|
||||
__x.begin(), __x.end(), __y.begin(), __y.end(), std::__synth_three_way);
|
||||
}
|
||||
|
||||
#endif // _LIBCPP_STD_VER <= 17
|
||||
|
||||
Reference in New Issue
Block a user