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>,