[libcxx-commits] [clang-tools-extra] [compiler-rt] [flang] [libcxx] [clang] [lld] [llvm] [libc++][ranges] P2116R9: Implements `views::enumerate` (PR #73617)
Christopher Di Bella via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Jan 2 14:17:02 PST 2024
================
@@ -0,0 +1,96 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
+
+// <ranges>
+
+// class enumerate_view
+
+// class enumerate_view::iterator
+
+// friend constexpr bool operator==(const iterator& x, const iterator& y) noexcept;
+
+#include <cassert>
+#include <ranges>
+
+#include "test_iterators.h"
+#include "../types.h"
+// #include "../types_iterators.h"
+
+// template <bool Const>
+// struct Iterator {
+// using value_type = int
+// using difference_type = std::std::ptrdiff_t;
+// using iterator_concept = std::input_iterator_tag;
+
+// constexpr decltype(auto) operator*() const { return *it_; }
+// constexpr Iterator& operator++() {
+// ++it_;
+
+// return *this;
+// }
+// constexpr void operator++(int) { ++it_; }
+
+// std::tuple<std::ptrdiff_t, int>* it_;
+// };
+
+// template <bool Const>
+// struct Sentinel {
+// constexpr bool operator==(const Iterator<Const>& i) const { return i.it_ == end_; }
+
+// std::tuple<std::ptrdiff_t, int>* end_;
+// };
+
+// template <bool Const>
+// struct CrossComparableSentinel {
+// template <bool C>
+// constexpr bool operator==(const Iterator<C>& i) const {
+// return i.it_ == end_;
+// }
+
+// std::tuple<std::ptrdiff_t, int>* end_;
+// };
+
+constexpr bool test() {
+ int buff[] = {0, 1, 2, 3, 5};
+ {
+ using View = std::ranges::enumerate_view<RangeView>;
+ RangeView const range(buff, buff + 5);
+
+ std::same_as<View> decltype(auto) ev = std::views::enumerate(range);
+
+ auto it1 = ev.begin();
+ auto it2 = it1 + 5;
+
+ assert(it1 == it1);
+ ASSERT_NOEXCEPT(it1 == it1);
+ assert(it1 != it2);
+ ASSERT_NOEXCEPT(it1 != it2);
+ assert(it2 != it1);
+ ASSERT_NOEXCEPT(it2 != it1);
+ assert(it2 == ev.end());
+ assert(ev.end() == it2);
+
+ for (std::size_t index = 0; index != 5; ++index) {
+ ++it1;
+ }
----------------
cjdb wrote:
Please hand-roll.
https://github.com/llvm/llvm-project/pull/73617
More information about the libcxx-commits
mailing list