On Wed, 19 Feb 2025 at 15:03, Patrick Palka <[email protected]> wrote:
>
> Tested on x86_64-pc-linux-gnu, does this look OK for trunk?
OK, thanks.
>
> -- >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
>