diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2020-01-06 12:06:41 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2020-01-06 12:06:41 +0000 |
commit | f31a99f7c1239d0bde7b1f60e664ee98020bd4e0 (patch) | |
tree | 1602a60d22ed32fe44e32c4f65e93a489fdd944d /libstdc++-v3 | |
parent | 4ce43ba44d696c97e21e9fb98d4a60f2f1dd9a04 (diff) |
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
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 9 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_algobase.h | 8 | ||||
-rw-r--r-- | libstdc++-v3/include/std/version | 2 | ||||
-rw-r--r-- | libstdc++-v3/libsupc++/compare | 6 |
4 files changed, 16 insertions, 9 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 3b65de706f2..1fe69c46c75 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -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): diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h index 76c323ab21b..dc922a0f3d2 100644 --- a/libstdc++-v3/include/bits/stl_algobase.h +++ b/libstdc++-v3/include/bits/stl_algobase.h @@ -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, diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version index ab8111468e4..81b9112e02a 100644 --- a/libstdc++-v3/include/std/version +++ b/libstdc++-v3/include/std/version @@ -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 diff --git a/libstdc++-v3/libsupc++/compare b/libstdc++-v3/libsupc++/compare index 31969fb5c04..98a592cbb14 100644 --- a/libstdc++-v3/libsupc++/compare +++ b/libstdc++-v3/libsupc++/compare @@ -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 |