libstdc++: Only use std::compare_three_way when concepts are supported
authorJonathan Wakely <jwakely@redhat.com>
Fri, 3 Jan 2020 14:44:39 +0000 (14:44 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Fri, 3 Jan 2020 14:44:39 +0000 (14:44 +0000)
Clang now supports three-way comparisons. That causes both overloads of
std::lexicographical_compare_three_way to be defined, but the second one
uses std::compare_three_way which depends on concepts. Clang does not
yet support concepts, so the second overload should also depend on
__cpp_lib_concepts.

* include/bits/stl_algobase.h (lexicographical_compare_three_way):
Only define four-argument overload when __cpp_lib_concepts is defined.

From-SVN: r279861

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/stl_algobase.h

index bb32f6e..3b65de7 100644 (file)
@@ -1,3 +1,8 @@
+2020-01-03  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/bits/stl_algobase.h (lexicographical_compare_three_way):
+       Only define four-argument overload when __cpp_lib_concepts is defined.
+
 2020-01-01  John David Anglin  <danglin@gcc.gnu.org>
 
        * config/abi/post/hppa-linux-gnu/baseline_symbols.txt: Update.
index 13de6ae..76c323a 100644 (file)
@@ -1751,6 +1751,7 @@ _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,
@@ -1762,6 +1763,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
                                                    __first2, __last2,
                                                    compare_three_way{});
     }
+#endif // concepts
 #endif // three_way_comparison
 
   template<typename _InputIterator1, typename _InputIterator2,