libstdc++: Define __cpp_lib_three_way_comparison conditionally
The contents of the <compare> header are not complete unless concepts are supported, so the feature test macro should depend on the macro for concepts. As a result, the std::lexicographical_compare_three_way function will not be defined unless concepts are supported, so there is no need to check __cpp_lib_concepts before using concepts in those functions. * include/bits/stl_algobase.h (__is_byte_iter, __min_cmp) (lexicographical_compare_three_way): Do not depend on __cpp_lib_concepts. * include/std/version (__cpp_lib_three_way_comparison): Only define when __cpp_lib_concepts is defined. * libsupc++/compare (__cpp_lib_three_way_comparison): Likewise. From-SVN: r279896
This commit is contained in:
parent
4ce43ba44d
commit
f31a99f7c1
@ -1,3 +1,12 @@
|
||||
2020-01-06 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
* include/bits/stl_algobase.h (__is_byte_iter, __min_cmp)
|
||||
(lexicographical_compare_three_way): Do not depend on
|
||||
__cpp_lib_concepts.
|
||||
* include/std/version (__cpp_lib_three_way_comparison): Only define
|
||||
when __cpp_lib_concepts is defined.
|
||||
* libsupc++/compare (__cpp_lib_three_way_comparison): Likewise.
|
||||
|
||||
2020-01-03 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
* include/bits/stl_algobase.h (lexicographical_compare_three_way):
|
||||
|
@ -1667,7 +1667,6 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
|
||||
}
|
||||
|
||||
#if __cpp_lib_three_way_comparison
|
||||
#if __cpp_lib_concepts
|
||||
// Iter points to a contiguous range of unsigned narrow character type
|
||||
// or std::byte, suitable for comparison by memcmp.
|
||||
template<typename _Iter>
|
||||
@ -1690,7 +1689,6 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
|
||||
return _Res{__y, __c};
|
||||
return _Res{__x, __c};
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Performs dictionary comparison on ranges.
|
||||
@ -1718,7 +1716,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
|
||||
__glibcxx_requires_valid_range(__first1, __last1);
|
||||
__glibcxx_requires_valid_range(__first2, __last2);
|
||||
|
||||
#if __cpp_lib_concepts && __cpp_lib_is_constant_evaluated
|
||||
#if __cpp_lib_is_constant_evaluated
|
||||
using _Cat = decltype(__comp(*__first1, *__first2));
|
||||
static_assert(same_as<common_comparison_category_t<_Cat>, _Cat>);
|
||||
|
||||
@ -1739,7 +1737,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
|
||||
}
|
||||
return __lencmp;
|
||||
}
|
||||
#endif // concepts && is_constant_evaluated
|
||||
#endif // is_constant_evaluated
|
||||
while (__first1 != __last1 && __first2 != __last2)
|
||||
{
|
||||
if (auto __cmp = __comp(*__first1, *__first2); __cmp != 0)
|
||||
@ -1751,7 +1749,6 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
|
||||
: __first2 != __last2 ? strong_ordering::less : strong_ordering::equal;
|
||||
}
|
||||
|
||||
#if __cpp_lib_concepts
|
||||
template<typename _InputIter1, typename _InputIter2>
|
||||
constexpr auto
|
||||
lexicographical_compare_three_way(_InputIter1 __first1,
|
||||
@ -1763,7 +1760,6 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
|
||||
__first2, __last2,
|
||||
compare_three_way{});
|
||||
}
|
||||
#endif // concepts
|
||||
#endif // three_way_comparison
|
||||
|
||||
template<typename _InputIterator1, typename _InputIterator2,
|
||||
|
@ -191,7 +191,7 @@
|
||||
#define __cpp_lib_list_remove_return_type 201806L
|
||||
#define __cpp_lib_math_constants 201907L
|
||||
#define __cpp_lib_span 201902L
|
||||
#if __cpp_impl_three_way_comparison >= 201907L
|
||||
#if __cpp_impl_three_way_comparison >= 201907L && __cpp_lib_concepts
|
||||
# define __cpp_lib_three_way_comparison 201711L
|
||||
#endif
|
||||
#define __cpp_lib_to_array 201907L
|
||||
|
@ -38,10 +38,12 @@
|
||||
|
||||
#include <concepts>
|
||||
|
||||
#if __cpp_lib_concepts
|
||||
# define __cpp_lib_three_way_comparison 201711L
|
||||
#endif
|
||||
|
||||
namespace std
|
||||
{
|
||||
#define __cpp_lib_three_way_comparison 201711L
|
||||
|
||||
// [cmp.categories], comparison category types
|
||||
|
||||
namespace __cmp_cat
|
||||
|
Loading…
Reference in New Issue
Block a user