@@ -32,13 +32,14 @@ enum class IterKind { inner_view, pattern };
32
32
33
33
template <std::forward_iterator Iter, IterKind Kind>
34
34
class IterSwapTrackingIterator {
35
- template <std::forward_iterator T, IterKind K>
36
- friend class IterSwapTrackingIterator ;
37
-
38
35
public:
39
36
using value_type = std::iter_value_t <Iter>;
40
37
using difference_type = std::iter_difference_t <Iter>;
41
38
39
+ constexpr Iter get_iter () const { return iter_; }
40
+
41
+ constexpr SwapKind* get_flag () const { return flag_; }
42
+
42
43
IterSwapTrackingIterator () = default ;
43
44
constexpr explicit IterSwapTrackingIterator (Iter iter, SwapKind* flag = nullptr )
44
45
: iter_(std::move(iter)), flag_(flag) {}
@@ -67,9 +68,9 @@ class IterSwapTrackingIterator {
67
68
template <std::indirectly_swappable<Iter> OtherIter, IterKind OtherKind>
68
69
friend constexpr decltype (auto )
69
70
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 () );
73
74
}
74
75
75
76
private:
0 commit comments