[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)>);
----------------
Zingam wrote:
```suggestion
static_assert(!std::is_constructible_v<decltype(iter1), decltype(iter2)>);
static_assert(!std::is_constructible_v<decltype(iter2), decltype(iter1)>);
```
Maybe use the type-trait for the negative cases. @frederick-vs-ja Is that correct?
Also add `#include <type_traits>` above.
https://github.com/llvm/llvm-project/pull/212044
More information about the libcxx-commits
mailing list