On 29/10/19 17:43 +0000, Jonathan Wakely wrote:
This adds most of the new C++20 features to <iterator>, as well as a few
initial pieces of <ranges> (but no actual <ranges> header just yet).

I broke Clang again with this. Fixed by the attached patch.

Tested powerpc64le-linux, committed to trunk.


commit 133a42d7bc99e082e9d8d8e1cb17c2f5ada1563a
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Tue Oct 29 19:36:00 2019 +0000

    Fix compilation errors with Clang
    
            * include/bits/range_access.h (ranges::disable_sized_range)
            (ranges::begin, ranges::end, ranges::cbegin, ranges::cend)
            (ranges::rbegin, ranges::rend, ranges::crbegin, ranges::crend)
            (ranges::size, ranges::empty, ranges::data, ranges::cdata)
            (ranges::range, ranges::sized_range, ranges::advance, ranges::distance)
            (ranges::next, ranges::prev): Guard with __cpp_lib_concepts.
            * include/bits/stl_iterator.h (disable_sized_sentinel): Likewise.

diff --git a/libstdc++-v3/include/bits/range_access.h b/libstdc++-v3/include/bits/range_access.h
index 3b6ed9aa66a..9c8bef6b3a1 100644
--- a/libstdc++-v3/include/bits/range_access.h
+++ b/libstdc++-v3/include/bits/range_access.h
@@ -349,6 +349,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     __adl_data(_Container& __cont) noexcept(noexcept(data(__cont)))
     { return data(__cont); }
 
+#ifdef __cpp_lib_concepts
 namespace ranges
 {
   template<typename>
@@ -1061,6 +1062,7 @@ namespace ranges
     }
 
 } // namespace ranges
+#endif // library concepts
 #endif // C++20
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace
diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h
index 966087598f4..c10117e9b38 100644
--- a/libstdc++-v3/include/bits/stl_iterator.h
+++ b/libstdc++-v3/include/bits/stl_iterator.h
@@ -442,7 +442,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     make_reverse_iterator(_Iterator __i)
     { return reverse_iterator<_Iterator>(__i); }
 
-#  if __cplusplus > 201703L
+#  if __cplusplus > 201703L && defined __cpp_lib_concepts
   template<typename _Iterator1, typename _Iterator2>
     requires (!sized_sentinel_for<_Iterator1, _Iterator2>)
     inline constexpr bool disable_sized_sentinel<reverse_iterator<_Iterator1>,

Reply via email to