Skip to content

Commit e94372d

Browse files
committed
iterator: iterator_concept
1 parent 471c360 commit e94372d

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

libcxx/include/__ranges/cartesian_product_view.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,20 @@ template <input_range First, forward_range... Vs>
169169
requires(view<First> && ... && view<Vs>)
170170
template <bool Const>
171171
class cartesian_product_view<First, Vs...>::iterator {
172+
static constexpr auto get_iterator_tag() {
173+
if constexpr (cartesian_product_is_random_access<Const, First, Vs...>)
174+
return random_access_iterator_tag{};
175+
else if constexpr (cartesian_product_is_bidirectional<Const, First, Vs...>)
176+
return bidirectional_iterator_tag{};
177+
else if constexpr (forward_range<__maybe_const<Const, First>>)
178+
return forward_iterator_tag{};
179+
else
180+
return input_iterator_tag{};
181+
}
182+
172183
public:
173184
using iterator_category = input_iterator_tag;
185+
using iterator_concept = decltype(get_iterator_tag());
174186
using value_type = tuple<range_value_t<__maybe_const<Const, First>>, range_value_t<__maybe_const<Const, Vs>>...>;
175187
using reference =
176188
tuple<range_reference_t<__maybe_const<Const, First>>, range_reference_t<__maybe_const<Const, Vs>>...>;

0 commit comments

Comments
 (0)