Skip to content

Commit f13264a

Browse files
committed
view: begin()
1 parent 12a45a4 commit f13264a

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

libcxx/include/__ranges/cartesian_product_view.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,18 @@ class cartesian_product_view : public view_interface<cartesian_product_view<Firs
8686
constexpr explicit cartesian_product_view(First first_base, Vs... bases)
8787
: bases_{std::move(first_base), std::move(bases)...} {}
8888

89+
constexpr iterator<false> begin()
90+
requires(!__simple_view<First> || ... || !__simple_view<Vs>)
91+
{
92+
return iterator<false>(*this, __tuple_transform(ranges::begin, bases_));
93+
}
94+
95+
constexpr iterator<true> begin() const
96+
requires(range<const First> && ... && range<const Vs>)
97+
{
98+
return iterator<true>(*this, __tuple_transform(ranges::begin, bases_));
99+
}
100+
89101
constexpr auto size()
90102
requires(sized_range<First> && ... && sized_range<Vs>)
91103
{
@@ -290,7 +302,7 @@ class cartesian_product_view<First, Vs...>::iterator {
290302
const auto& v = std::get<N>(parent_->bases_);
291303
auto& it = std::get<N>(current_);
292304
const auto sz = static_cast<difference_type>(std::ranges::size(v));
293-
const auto first = begin(v);
305+
const auto first = ranges::begin(v);
294306

295307
if (sz > 0) {
296308
const auto idx = static_cast<difference_type>(std::distance(first, it));

0 commit comments

Comments
 (0)