libstdc++: Define __cpp_lib_three_way_comparison conditionally
authorJonathan Wakely <jwakely@redhat.com>
Mon, 6 Jan 2020 12:06:41 +0000 (12:06 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Mon, 6 Jan 2020 12:06:41 +0000 (12:06 +0000)
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

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/stl_algobase.h
libstdc++-v3/include/std/version
libstdc++-v3/libsupc++/compare

index 3b65de706f227f435ca61ea7ffe6aced393d53a4..1fe69c46c75bc85eefa640971448bbcd762ff872 100644 (file)
@@ -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):
index 76c323ab21b98892da1eeb75fbdefe4ac486c923..dc922a0f3d2bdafbffe88c1a5153b6d5d7208530 100644 (file)
@@ -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,
index ab8111468e445e6f646e2e86dc7dc1b61d92b54e..81b9112e02a7ebdec3e5d97947fe2e7e1da0ca13 100644 (file)
 #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
index 31969fb5c04886d83988f6d2830b38b1a76b9085..98a592cbb14078fc2468634449f899a9d26315e4 100644 (file)
 
 #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