[libcxx-commits] [libcxx] [libc++][ranges][enumerate_view] Fix iterator converting constructor test (PR #212044)
Hristo Hristov via libcxx-commits
libcxx-commits at lists.llvm.org
Fri Aug 14 23:31:35 PDT 2026
================
@@ -22,13 +22,46 @@
#include <concepts>
#include <memory>
#include <ranges>
-#include <type_traits>
#include <utility>
-#include "test_iterators.h"
+#include "type_algorithms.h"
+#include "../../range_adaptor_types.h"
#include "../types.h"
+using ConstIterIncompatibleView =
+ BasicView<forward_iterator<int*>,
+ forward_iterator<int*>,
+ random_access_iterator<const int*>,
+ random_access_iterator<const int*>>;
+static_assert(!std::convertible_to<std::ranges::iterator_t<ConstIterIncompatibleView>,
+ std::ranges::iterator_t<const ConstIterIncompatibleView>>);
+
+constexpr void sfinae_test() {
+ int buffer[3] = {1, 2, 3};
+ {
+ // underlying non-const to const not convertible
+ std::ranges::enumerate_view v(ConstIterIncompatibleView{buffer});
+ auto iter1 = v.begin();
+ auto iter2 = std::as_const(v).begin();
+
+ static_assert(!std::same_as<decltype(iter1), decltype(iter2)>);
+ static_assert(!std::constructible_from<decltype(iter1), decltype(iter2)>);
+ static_assert(!std::constructible_from<decltype(iter2), decltype(iter1)>);
+ }
+ {
+ std::ranges::enumerate_view v(NonSimpleCommon{buffer});
+ auto iter1 = v.begin();
+ std::ranges::iterator_t<const decltype(v)> iter2 = iter1;
+ assert(iter1 == iter2);
----------------
Zingam wrote:
```suggestion
std::ranges::enumerate_view v(NonSimpleCommon{buffer});
auto iter1 = v.begin();
std::ranges::iterator_t<const decltype(v)> iter2 = iter1;
assert(iter1 == iter2);
```
Nit: Let's add an empty line here.
https://github.com/llvm/llvm-project/pull/212044
More information about the libcxx-commits
mailing list