[libcxx-commits] [libcxx] [compiler-rt] [clang] [llvm] [clang-tools-extra] [flang] [lld] [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,138 @@
+//===----------------------------------------------------------------------===//
+//
+// 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
+
+// constexpr const iterator_t<Base>& base() const & noexcept;
+// constexpr iterator_t<Base> base() &&;
+
+#include <ranges>
+
+#include <array>
+#include <cassert>
+#include <concepts>
+#include <utility>
+#include <tuple>
+
+#include "test_iterators.h"
+#include "../types.h"
+
+// template <class It, class ItTraits = It>
+// class MovableIterator {
+//   using Traits = std::iterator_traits<ItTraits>;
+//   It it_;
+
+//   template <class U, class T>
+//   friend class MovableIterator;
+
+// public:
+//   using iterator_category = std::input_iterator_tag;
+//   using value_type        = typename Traits::value_type;
+//   using difference_type   = typename Traits::difference_type;
+//   using pointer           = It;
+//   using reference         = typename Traits::reference;
+
+//   TEST_CONSTEXPR explicit MovableIterator(It it) : it_(it), justInitialized{true} { static_assert(false); }
+
+//   template <class U, class T>
+//   TEST_CONSTEXPR MovableIterator(const MovableIterator<U, T>& u) : it_(u.it_), wasCopyInitialized{true} {
+//     static_assert(false);
+//   }
+
+//   template <class U, class T, class = typename std::enable_if<std::is_default_constructible<U>::value>::type>
+//   TEST_CONSTEXPR_CXX14 MovableIterator(MovableIterator<U, T>&& u) : it_(u.it_), wasMoveInitialized{true} {
+//     static_assert(false);
+//     u.it_ = U();
+//   }
+
+//   TEST_CONSTEXPR reference operator*() const { return *it_; }
+
+//   TEST_CONSTEXPR_CXX14 MovableIterator& operator++() {
+//     ++it_;
+//     return *this;
+//   }
+//   TEST_CONSTEXPR_CXX14 MovableIterator operator++(int) { return MovableIterator(it_++); }
+
+//   friend TEST_CONSTEXPR bool operator==(const MovableIterator& x, const MovableIterator& y) { return x.it_ == y.it_; }
+//   friend TEST_CONSTEXPR bool operator!=(const MovableIterator& x, const MovableIterator& y) { return x.it_ != y.it_; }
+
+//   friend TEST_CONSTEXPR It base(const MovableIterator& i) { return i.it_; }
+
+//   template <class T>
+//   void operator,(T const&) = delete;
+
+//   bool justInitialized    = false;
+//   bool wasCopyInitialized = false;
+//   bool wasMoveInitialized = false;
+// };
----------------
cjdb wrote:

```suggestion
```
Please delete this if it's not being used.

https://github.com/llvm/llvm-project/pull/73617


More information about the libcxx-commits mailing list