[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