@@ -32,13 +32,14 @@ enum class IterKind { inner_view, pattern };
3232
3333template <std::forward_iterator Iter, IterKind Kind>
3434class IterSwapTrackingIterator {
35- template <std::forward_iterator T, IterKind K>
36- friend class IterSwapTrackingIterator ;
37-
3835public:
3936 using value_type = std::iter_value_t <Iter>;
4037 using difference_type = std::iter_difference_t <Iter>;
4138
39+ constexpr Iter get_iter () const { return iter_; }
40+
41+ constexpr SwapKind* get_flag () const { return flag_; }
42+
4243 IterSwapTrackingIterator () = default ;
4344 constexpr explicit IterSwapTrackingIterator (Iter iter, SwapKind* flag = nullptr )
4445 : iter_(std::move(iter)), flag_(flag) {}
@@ -67,9 +68,9 @@ class IterSwapTrackingIterator {
6768 template <std::indirectly_swappable<Iter> OtherIter, IterKind OtherKind>
6869 friend constexpr decltype (auto )
6970 iter_swap(const IterSwapTrackingIterator& lhs, const IterSwapTrackingIterator<OtherIter, OtherKind>& rhs) {
70- assert (lhs.flag_ != nullptr && rhs.flag_ != nullptr );
71- *lhs.flag_ = *rhs.flag_ = SwapKind::with_different_type;
72- return std::ranges::iter_swap (lhs.iter_ , rhs.iter_ );
71+ assert (lhs.flag_ != nullptr && rhs.get_flag () != nullptr );
72+ *lhs.flag_ = *rhs.get_flag () = SwapKind::with_different_type;
73+ return std::ranges::iter_swap (lhs.iter_ , rhs.get_iter () );
7374 }
7475
7576private:
0 commit comments