Tested on x86_64-pc-linux-gnu, does this look OK for trunk? -- >8 --
Even though iterator is a reserved macro name, we can't use it as the name of this implementation detail type since it could introduce name lookup ambiguity in valid code, e.g. struct A { using iterator = void; } struct B : concat_view<...>, A { using type = iterator; }; libstdc++-v3/ChangeLog: * include/std/ranges (concat_view::iterator): Rename to ... (concat_view::_Iterator): ... this throughout. --- libstdc++-v3/include/std/ranges | 78 ++++++++++++++++----------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index a56dae43625..fc2d84d5afa 100644 --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -9693,7 +9693,7 @@ namespace ranges { tuple<_Vs...> _M_views; - template<bool _Const> class iterator; + template<bool _Const> class _Iterator; public: constexpr concat_view() = default; @@ -9703,18 +9703,18 @@ namespace ranges : _M_views(std::move(__views)...) { } - constexpr iterator<false> + constexpr _Iterator<false> begin() requires (!(__detail::__simple_view<_Vs> && ...)) { - iterator<false> __it(this, in_place_index<0>, ranges::begin(std::get<0>(_M_views))); + _Iterator<false> __it(this, in_place_index<0>, ranges::begin(std::get<0>(_M_views))); __it.template _M_satisfy<0>(); return __it; } - constexpr iterator<true> + constexpr _Iterator<true> begin() const requires (range<const _Vs> && ...) && __detail::__concatable<const _Vs...> { - iterator<true> __it(this, in_place_index<0>, ranges::begin(std::get<0>(_M_views))); + _Iterator<true> __it(this, in_place_index<0>, ranges::begin(std::get<0>(_M_views))); __it.template _M_satisfy<0>(); return __it; } @@ -9725,8 +9725,8 @@ namespace ranges constexpr auto __n = sizeof...(_Vs); if constexpr ((semiregular<iterator_t<_Vs>> && ...) && common_range<_Vs...[__n - 1]>) - return iterator<false>(this, in_place_index<__n - 1>, - ranges::end(std::get<__n - 1>(_M_views))); + return _Iterator<false>(this, in_place_index<__n - 1>, + ranges::end(std::get<__n - 1>(_M_views))); else return default_sentinel; } @@ -9737,8 +9737,8 @@ namespace ranges constexpr auto __n = sizeof...(_Vs); if constexpr ((semiregular<iterator_t<const _Vs>> && ...) && common_range<const _Vs...[__n - 1]>) - return iterator<true>(this, in_place_index<__n - 1>, - ranges::end(std::get<__n - 1>(_M_views))); + return _Iterator<true>(this, in_place_index<__n - 1>, + ranges::end(std::get<__n - 1>(_M_views))); else return default_sentinel; } @@ -9801,7 +9801,7 @@ namespace ranges template<input_range... _Vs> requires (view<_Vs> && ...) && (sizeof...(_Vs) > 0) && __detail::__concatable<_Vs...> template<bool _Const> - class concat_view<_Vs...>::iterator + class concat_view<_Vs...>::_Iterator : public __detail::__concat_view_iter_cat<_Const, _Vs...> { static auto @@ -9818,7 +9818,7 @@ namespace ranges } friend concat_view; - friend iterator<!_Const>; + friend _Iterator<!_Const>; public: // iterator_category defined in __concat_view_iter_cat @@ -9930,16 +9930,16 @@ namespace ranges template<typename... _Args> explicit constexpr - iterator(__maybe_const_t<_Const, concat_view>* __parent, _Args&&... __args) + _Iterator(__maybe_const_t<_Const, concat_view>* __parent, _Args&&... __args) requires constructible_from<__base_iter, _Args&&...> : _M_parent(__parent), _M_it(std::forward<_Args>(__args)...) { } public: - iterator() = default; + _Iterator() = default; constexpr - iterator(iterator<!_Const> __it) + _Iterator(_Iterator<!_Const> __it) requires _Const && (convertible_to<iterator_t<_Vs>, iterator_t<const _Vs>> && ...) : _M_parent(__it._M_parent), _M_it(_S_invoke_with_runtime_index([this, &__it]<size_t _Idx>() { @@ -9956,7 +9956,7 @@ namespace ranges return std::visit([](auto&& __it) -> reference { return *__it; }, _M_it); } - constexpr iterator& + constexpr _Iterator& operator++() { _M_invoke_with_runtime_index([this]<size_t _Idx>() { @@ -9970,7 +9970,7 @@ namespace ranges operator++(int) { ++*this; } - constexpr iterator + constexpr _Iterator operator++(int) requires __detail::__all_forward<_Const, _Vs...> { @@ -9979,7 +9979,7 @@ namespace ranges return __tmp; } - constexpr iterator& + constexpr _Iterator& operator--() requires __detail::__concat_is_bidirectional<_Const, _Vs...> { @@ -9990,7 +9990,7 @@ namespace ranges return *this; } - constexpr iterator + constexpr _Iterator operator--(int) requires __detail::__concat_is_bidirectional<_Const, _Vs...> { @@ -9999,7 +9999,7 @@ namespace ranges return __tmp; } - constexpr iterator& + constexpr _Iterator& operator+=(difference_type __n) requires __detail::__concat_is_random_access<_Const, _Vs...> { @@ -10014,7 +10014,7 @@ namespace ranges return *this; } - constexpr iterator& + constexpr _Iterator& operator-=(difference_type __n) requires __detail::__concat_is_random_access<_Const, _Vs...> { @@ -10028,7 +10028,7 @@ namespace ranges { return *((*this) + __n); } friend constexpr bool - operator==(const iterator& __x, const iterator& __y) + operator==(const _Iterator& __x, const _Iterator& __y) requires (equality_comparable<iterator_t<__maybe_const_t<_Const, _Vs>>> && ...) { __glibcxx_assert(!__x._M_it.valueless_by_exception()); @@ -10037,7 +10037,7 @@ namespace ranges } friend constexpr bool - operator==(const iterator& __it, default_sentinel_t) + operator==(const _Iterator& __it, default_sentinel_t) { __glibcxx_assert(!__it._M_it.valueless_by_exception()); constexpr auto __last_idx = sizeof...(_Vs) - 1; @@ -10047,48 +10047,48 @@ namespace ranges } friend constexpr bool - operator<(const iterator& __x, const iterator& __y) + operator<(const _Iterator& __x, const _Iterator& __y) requires __detail::__all_random_access<_Const, _Vs...> { return __x._M_it < __y._M_it; } friend constexpr bool - operator>(const iterator& __x, const iterator& __y) + operator>(const _Iterator& __x, const _Iterator& __y) requires __detail::__all_random_access<_Const, _Vs...> { return __x._M_it > __y._M_it; } friend constexpr bool - operator<=(const iterator& __x, const iterator& __y) + operator<=(const _Iterator& __x, const _Iterator& __y) requires __detail::__all_random_access<_Const, _Vs...> { return __x._M_it <= __y._M_it; } friend constexpr bool - operator>=(const iterator& __x, const iterator& __y) + operator>=(const _Iterator& __x, const _Iterator& __y) requires __detail::__all_random_access<_Const, _Vs...> { return __x._M_it >= __y._M_it; } friend constexpr auto - operator<=>(const iterator& __x, const iterator& __y) + operator<=>(const _Iterator& __x, const _Iterator& __y) requires __detail::__all_random_access<_Const, _Vs...> && (three_way_comparable<iterator_t<__maybe_const_t<_Const, _Vs>>> && ...) { return __x._M_it <=> __y._M_it; } - friend constexpr iterator - operator+(const iterator& __it, difference_type __n) + friend constexpr _Iterator + operator+(const _Iterator& __it, difference_type __n) requires __detail::__concat_is_random_access<_Const, _Vs...> { return auto(__it) += __n; } - friend constexpr iterator - operator+(difference_type __n, const iterator& __it) + friend constexpr _Iterator + operator+(difference_type __n, const _Iterator& __it) requires __detail::__concat_is_random_access<_Const, _Vs...> { return __it + __n; } - friend constexpr iterator - operator-(const iterator& __it, difference_type __n) + friend constexpr _Iterator + operator-(const _Iterator& __it, difference_type __n) requires __detail::__concat_is_random_access<_Const, _Vs...> { return auto(__it) -= __n; } friend constexpr difference_type - operator-(const iterator& __x, const iterator& __y) + operator-(const _Iterator& __x, const _Iterator& __y) requires __detail::__concat_is_random_access<_Const, _Vs...> { return _S_invoke_with_runtime_index([&]<size_t _Ix>() -> difference_type { @@ -10120,7 +10120,7 @@ namespace ranges } friend constexpr difference_type - operator-(const iterator& __x, default_sentinel_t) + operator-(const _Iterator& __x, default_sentinel_t) requires (sized_sentinel_for<sentinel_t<__maybe_const_t<_Const, _Vs>>, iterator_t<__maybe_const_t<_Const, _Vs>>> && ...) && __detail::__all_but_first_sized<__maybe_const_t<_Const, _Vs>...>::value @@ -10141,14 +10141,14 @@ namespace ranges } friend constexpr difference_type - operator-(default_sentinel_t, const iterator& __x) + operator-(default_sentinel_t, const _Iterator& __x) requires (sized_sentinel_for<sentinel_t<__maybe_const_t<_Const, _Vs>>, iterator_t<__maybe_const_t<_Const, _Vs>>> && ...) && __detail::__all_but_first_sized<__maybe_const_t<_Const, _Vs>...>::value { return -(__x - default_sentinel); } friend constexpr decltype(auto) - iter_move(const iterator& __it) + iter_move(const _Iterator& __it) { using _Res = __detail::__concat_rvalue_reference_t<__maybe_const_t<_Const, _Vs>...>; return std::visit([](const auto& __i) -> _Res { @@ -10157,8 +10157,8 @@ namespace ranges } friend constexpr void - iter_swap(const iterator& __x, const iterator& __y) - requires swappable_with<iter_reference_t<iterator>, iter_reference_t<iterator>> + iter_swap(const _Iterator& __x, const _Iterator& __y) + requires swappable_with<iter_reference_t<_Iterator>, iter_reference_t<_Iterator>> && (... && indirectly_swappable<iterator_t<__maybe_const_t<_Const, _Vs>>>) { std::visit([&]<typename _Tp, typename _Up>(const _Tp& __it1, const _Up& __it2) { -- 2.48.1.385.ga554262210.dirty