libstdc++: Implement LWG 3517/3520 for join_view/transform_view
authorPatrick Palka <ppalka@redhat.com>
Wed, 5 May 2021 16:07:32 +0000 (12:07 -0400)
committerPatrick Palka <ppalka@redhat.com>
Wed, 5 May 2021 16:07:32 +0000 (12:07 -0400)
libstdc++-v3/ChangeLog:

* include/std/ranges (transform_view::_Iterator::iter_swap):
Remove as per LWG 3520.
(join_view::_Iterator::iter_swap): Add indirectly_swappable
constraint as per LWG 3517.

libstdc++-v3/include/std/ranges

index 4a7ca49..f21e08a 100644 (file)
@@ -1581,12 +1581,6 @@ namespace views::__adaptor
              return *__i;
          }
 
-         friend constexpr void
-         iter_swap(const _Iterator& __x, const _Iterator& __y)
-           noexcept(noexcept(ranges::iter_swap(__x._M_current, __y._M_current)))
-           requires indirectly_swappable<_Base_iter>
-         { return ranges::iter_swap(__x._M_current, __y._M_current); }
-
          friend _Iterator<!_Const>;
          template<bool> friend struct _Sentinel;
        };
@@ -2520,6 +2514,7 @@ namespace views::__adaptor
          friend constexpr void
          iter_swap(const _Iterator& __x, const _Iterator& __y)
            noexcept(noexcept(ranges::iter_swap(__x._M_inner, __y._M_inner)))
+           requires indirectly_swappable<_Inner_iter>
          { return ranges::iter_swap(__x._M_inner, __y._M_inner); }
 
          friend _Iterator<!_Const>;