[libcxx-commits] [libcxx] [libc++][ranges] `ranges::iota_view` support `int128_t` in tests (PR #175447)

Hristo Hristov via libcxx-commits libcxx-commits at lists.llvm.org
Sun Jan 11 09:18:17 PST 2026


https://github.com/H-G-Hristov updated https://github.com/llvm/llvm-project/pull/175447

>From 44284cde6d74a8c0a849f9f30feb23a37a796820 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Sun, 24 Aug 2025 13:44:49 +0300
Subject: [PATCH 1/8] [libc++][ranges] LWG3610: iota_view::size sometimes
 rejects integer-class types

Fixes #104948

- https://wg21.link/LWG3610
---
 libcxx/docs/Status/Cxx23Issues.csv             |  2 +-
 libcxx/include/__ranges/iota_view.h            |  2 +-
 .../range.iota.view/size.pass.cpp              | 18 ++++++++++++++++++
 3 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/libcxx/docs/Status/Cxx23Issues.csv b/libcxx/docs/Status/Cxx23Issues.csv
index 189f8452e0678..38571dabae463 100644
--- a/libcxx/docs/Status/Cxx23Issues.csv
+++ b/libcxx/docs/Status/Cxx23Issues.csv
@@ -143,7 +143,7 @@
 "`LWG3598 <https://wg21.link/LWG3598>`__","``system_category().default_error_condition(0)`` is underspecified","2022-02 (Virtual)","","",""
 "`LWG3601 <https://wg21.link/LWG3601>`__","common_iterator's postfix-proxy needs ``indirectly_readable`` ","2022-02 (Virtual)","","",""
 "`LWG3607 <https://wg21.link/LWG3607>`__","``contiguous_iterator`` should not be allowed to have custom ``iter_move`` and ``iter_swap`` behavior","2022-02 (Virtual)","|Nothing To Do|","",""
-"`LWG3610 <https://wg21.link/LWG3610>`__","``iota_view::size`` sometimes rejects integer-class types","2022-02 (Virtual)","","",""
+"`LWG3610 <https://wg21.link/LWG3610>`__","``iota_view::size`` sometimes rejects integer-class types","2022-02 (Virtual)","|Complete|","22",""
 "`LWG3612 <https://wg21.link/LWG3612>`__","Inconsistent pointer alignment in ``std::format`` ","2022-02 (Virtual)","|Complete|","14",""
 "`LWG3616 <https://wg21.link/LWG3616>`__","LWG 3498 seems to miss the non-member ``swap`` for ``basic_syncbuf`` ","2022-02 (Virtual)","|Complete|","18",""
 "`LWG3618 <https://wg21.link/LWG3618>`__","Unnecessary ``iter_move`` for ``transform_view::iterator`` ","2022-02 (Virtual)","|Complete|","19",""
diff --git a/libcxx/include/__ranges/iota_view.h b/libcxx/include/__ranges/iota_view.h
index 4b84585258b91..cf401a4665fcd 100644
--- a/libcxx/include/__ranges/iota_view.h
+++ b/libcxx/include/__ranges/iota_view.h
@@ -348,7 +348,7 @@ class iota_view : public view_interface<iota_view<_Start, _BoundSentinel>> {
 
   _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
     requires(same_as<_Start, _BoundSentinel> && __advanceable<_Start>) ||
-            (integral<_Start> && integral<_BoundSentinel>) || sized_sentinel_for<_BoundSentinel, _Start>
+            (__integer_like<_Start> && __integer_like<_BoundSentinel>) || sized_sentinel_for<_BoundSentinel, _Start>
   {
     if constexpr (__integer_like<_Start> && __integer_like<_BoundSentinel>) {
       return (__value_ < 0)
diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/size.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/size.pass.cpp
index b894bc542be10..90afec2fba177 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/size.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/size.pass.cpp
@@ -16,8 +16,21 @@
 #include <ranges>
 
 #include "test_macros.h"
+#define TEST_HAS_NO_INT128
+#include "type_algorithms.h"
 #include "types.h"
 
+template <typename T>
+concept HasSize = requires(const T t) { t.size(); };
+
+struct CheckForSize {
+  template <class T>
+  constexpr void operator()() {
+    static_assert(HasSize<std::ranges::iota_view<T, int>>);
+    static_assert(HasSize<std::ranges::iota_view<T, T>>);
+  }
+};
+
 constexpr bool test() {
   // Both are integer like and both are less than zero.
   {
@@ -99,6 +112,11 @@ constexpr bool test() {
     assert(sz == 10);
   }
 
+  // LWG3610: `iota_view::size` sometimes rejects integer-class types
+  {
+    types::for_each(types::integer_types{}, CheckForSize{});
+  }
+
   return true;
 }
 

>From bee2ac2a7a4da6b6f234106cbb3070577bf49a96 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Mon, 25 Aug 2025 11:28:26 +0300
Subject: [PATCH 2/8] Updated test

---
 .../ranges/range.factories/range.iota.view/size.pass.cpp   | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/size.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/size.pass.cpp
index 90afec2fba177..315e581aed577 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/size.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/size.pass.cpp
@@ -24,10 +24,11 @@ template <typename T>
 concept HasSize = requires(const T t) { t.size(); };
 
 struct CheckForSize {
-  template <class T>
+  template <class IntegerLikeT>
   constexpr void operator()() {
-    static_assert(HasSize<std::ranges::iota_view<T, int>>);
-    static_assert(HasSize<std::ranges::iota_view<T, T>>);
+    types::for_each(types::integer_types{}, []<typename BoundT>() {
+      static_assert(HasSize<std::ranges::iota_view<IntegerLikeT, BoundT>>);
+    });
   }
 };
 

>From 1575d9566e5e65411561e60b928092055ed1ee80 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Mon, 25 Aug 2025 14:26:11 +0300
Subject: [PATCH 3/8] Added `__int128_t` support

---
 libcxx/include/__ranges/iota_view.h                       | 6 ++++++
 .../ranges/range.factories/range.iota.view/begin.pass.cpp | 4 ++++
 .../ranges/range.factories/range.iota.view/end.pass.cpp   | 8 ++++++++
 .../iterator/member_typedefs.compile.pass.cpp             | 8 ++++++++
 .../range.iota.view/iterator/star.pass.cpp                | 6 ++++++
 .../range.iota.view/iterator/subscript.pass.cpp           | 6 ++++++
 .../ranges/range.factories/range.iota.view/size.pass.cpp  | 1 -
 7 files changed, 38 insertions(+), 1 deletion(-)

diff --git a/libcxx/include/__ranges/iota_view.h b/libcxx/include/__ranges/iota_view.h
index cf401a4665fcd..275694a054057 100644
--- a/libcxx/include/__ranges/iota_view.h
+++ b/libcxx/include/__ranges/iota_view.h
@@ -57,11 +57,17 @@ struct __get_wider_signed {
       return type_identity<int>{};
     else if constexpr (sizeof(_Int) < sizeof(long))
       return type_identity<long>{};
+    else if constexpr (sizeof(_Int) < sizeof(long long))
+      return type_identity<long long>{};
     else
+#  if _LIBCPP_HAS_INT128
+      return type_identity<__int128_t>{};
+#  else
       return type_identity<long long>{};
 
     static_assert(
         sizeof(_Int) <= sizeof(long long), "Found integer-like type that is bigger than largest integer like type.");
+#  endif
   }
 
   using type = typename decltype(__call())::type;
diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/begin.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/begin.pass.cpp
index 06419c1b14ee0..dbe052ea18287 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/begin.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/begin.pass.cpp
@@ -40,6 +40,10 @@ constexpr void testType() {
 
 constexpr bool test() {
   testType<SomeInt>();
+#ifndef TEST_HAS_NO_INT128
+  testType<__int128_t>();
+  testType<__uint128_t>();
+#endif
   testType<long long>();
   testType<unsigned long long>();
   testType<signed long>();
diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/end.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/end.pass.cpp
index 6abbef55b6ba7..d12079fdb5eec 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/end.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/end.pass.cpp
@@ -61,6 +61,14 @@ constexpr void testType(U u) {
 constexpr bool test() {
   testType<SomeInt>(SomeInt(10));
   testType<SomeInt>(IntComparableWith(SomeInt(10)));
+#ifndef TEST_HAS_NO_INT128
+  testType<__int128_t>(__int128_t(10));
+  testType<__uint128_t>(__uint128_t(10));
+#endif
+  testType<signed long long>(10LL);
+  testType<unsigned long long>(10ULL);
+  testType<signed long long>(IntComparableWith<signed long long>(10));
+  testType<unsigned long long>(IntComparableWith<unsigned long long>(10));
   testType<signed long>(IntComparableWith<signed long>(10));
   testType<unsigned long>(IntComparableWith<unsigned long>(10));
   testType<int>(IntComparableWith<int>(10));
diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/member_typedefs.compile.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/member_typedefs.compile.pass.cpp
index c2f7fd14042a8..2cd7105adad4b 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/member_typedefs.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/member_typedefs.compile.pass.cpp
@@ -106,7 +106,11 @@ void test() {
     // Same as below, if there is no type larger than long, we can just use that.
     static_assert(sizeof(Iter::difference_type) >= sizeof(long));
     static_assert(std::is_signed_v<Iter::difference_type>);
+#ifdef TEST_HAS_NO_INT128
     LIBCPP_STATIC_ASSERT(std::same_as<Iter::difference_type, long long>);
+#else
+    LIBCPP_STATIC_ASSERT(std::same_as<Iter::difference_type, __int128_t>);
+#endif
   }
   {
     const std::ranges::iota_view<long long> io(0);
@@ -118,7 +122,11 @@ void test() {
     // https://eel.is/c++draft/range.iota.view#1.3
     static_assert(sizeof(Iter::difference_type) >= sizeof(long long));
     static_assert(std::is_signed_v<Iter::difference_type>);
+#ifdef TEST_HAS_NO_INT128
     LIBCPP_STATIC_ASSERT(std::same_as<Iter::difference_type, long long>);
+#else
+    LIBCPP_STATIC_ASSERT(std::same_as<Iter::difference_type, __int128_t>);
+#endif
   }
   {
     const std::ranges::iota_view<Decrementable> io;
diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/star.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/star.pass.cpp
index 570c74e29c686..b776d90c5e5e3 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/star.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/star.pass.cpp
@@ -81,6 +81,12 @@ constexpr void testType() {
 constexpr bool test() {
   testType<SomeInt>();
   testType<NotNoexceptCopy>();
+#ifndef TEST_HAS_NO_INT128
+  testType<__int128_t>();
+  testType<__uint128_t>();
+#endif
+  testType<signed long long>();
+  testType<unsigned long long>();
   testType<signed long>();
   testType<unsigned long>();
   testType<int>();
diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/subscript.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/subscript.pass.cpp
index 0e5aca0dd554c..786b63dfeedee 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/subscript.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/subscript.pass.cpp
@@ -47,6 +47,12 @@ constexpr void testType() {
 
 constexpr bool test() {
   testType<SomeInt>();
+#ifndef TEST_HAS_NO_INT128
+  testType<__int128_t>();
+  testType<__uint128_t>();
+#endif
+  testType<signed long long>();
+  testType<unsigned long long>();
   testType<signed long>();
   testType<unsigned long>();
   testType<int>();
diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/size.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/size.pass.cpp
index 315e581aed577..bb8215339b2bd 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/size.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/size.pass.cpp
@@ -16,7 +16,6 @@
 #include <ranges>
 
 #include "test_macros.h"
-#define TEST_HAS_NO_INT128
 #include "type_algorithms.h"
 #include "types.h"
 

>From 50bdaa9800c2f267eeda4c26d3519f4b20fdfab2 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Thu, 20 Nov 2025 05:15:33 +0200
Subject: [PATCH 4/8] Revert changes

---
 libcxx/include/__ranges/iota_view.h | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/libcxx/include/__ranges/iota_view.h b/libcxx/include/__ranges/iota_view.h
index d3d571e7efa4a..32ff3408e54ea 100644
--- a/libcxx/include/__ranges/iota_view.h
+++ b/libcxx/include/__ranges/iota_view.h
@@ -58,17 +58,11 @@ struct __get_wider_signed {
       return type_identity<int>{};
     else if constexpr (sizeof(_Int) < sizeof(long))
       return type_identity<long>{};
-    else if constexpr (sizeof(_Int) < sizeof(long long))
-      return type_identity<long long>{};
     else
-#  if _LIBCPP_HAS_INT128
-      return type_identity<__int128_t>{};
-#  else
       return type_identity<long long>{};
 
     static_assert(
         sizeof(_Int) <= sizeof(long long), "Found integer-like type that is bigger than largest integer like type.");
-#  endif
   }
 
   using type = typename decltype(__call())::type;
@@ -355,7 +349,7 @@ class iota_view : public view_interface<iota_view<_Start, _BoundSentinel>> {
 
   _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
     requires(same_as<_Start, _BoundSentinel> && __advanceable<_Start>) ||
-            (__integer_like<_Start> && __integer_like<_BoundSentinel>) || sized_sentinel_for<_BoundSentinel, _Start>
+            (integral<_Start> && integral<_BoundSentinel>) || sized_sentinel_for<_BoundSentinel, _Start>
   {
     if constexpr (__integer_like<_Start> && __integer_like<_BoundSentinel>) {
       return (__value_ < 0)

>From d8975ea088a9d4e6cba9e76e0a293a2eb4835193 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Thu, 20 Nov 2025 05:29:00 +0200
Subject: [PATCH 5/8] Reverted too mucb

---
 libcxx/include/__ranges/iota_view.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libcxx/include/__ranges/iota_view.h b/libcxx/include/__ranges/iota_view.h
index f66f3f9183fc7..0d618bec966f1 100644
--- a/libcxx/include/__ranges/iota_view.h
+++ b/libcxx/include/__ranges/iota_view.h
@@ -355,7 +355,7 @@ class iota_view : public view_interface<iota_view<_Start, _BoundSentinel>> {
 
   _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
     requires(same_as<_Start, _BoundSentinel> && __advanceable<_Start>) ||
-            (integral<_Start> && integral<_BoundSentinel>) || sized_sentinel_for<_BoundSentinel, _Start>
+            (__integer_like<_Start> && __integer_like<_BoundSentinel>) || sized_sentinel_for<_BoundSentinel, _Start>
   {
     if constexpr (__integer_like<_Start> && __integer_like<_BoundSentinel>) {
       return (__value_ < 0)

>From b410c1d93d0c68db34118de3434f2097895407e0 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Thu, 20 Nov 2025 05:40:37 +0200
Subject: [PATCH 6/8] Cleanup

---
 .../range.factories/range.iota.view/size.pass.cpp | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/size.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/size.pass.cpp
index 79f9d1d2bab5f..2b20e010fa2f5 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/size.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/size.pass.cpp
@@ -22,15 +22,6 @@
 template <typename T>
 concept HasSize = requires(const T t) { t.size(); };
 
-struct CheckForSize {
-  template <class IntegerLikeT>
-  constexpr void operator()() {
-    types::for_each(types::integer_types{}, []<typename BoundT>() {
-      static_assert(HasSize<std::ranges::iota_view<IntegerLikeT, BoundT>>);
-    });
-  }
-};
-
 constexpr bool test() {
   // Both are integer like and both are less than zero.
   {
@@ -114,7 +105,11 @@ constexpr bool test() {
 
   // LWG3610: `iota_view::size` sometimes rejects integer-class types
   {
-    types::for_each(types::integer_types{}, CheckForSize{});
+    types::for_each(types::integer_types{}, []<typename IntegerLikeT>() {
+      types::for_each(types::integer_types{}, []<typename BoundT>() {
+        static_assert(HasSize<std::ranges::iota_view<IntegerLikeT, BoundT>>);
+      });
+    });
   }
 
   return true;

>From a06729dc0f35136f019e08e284b3fd82f7a8e7f6 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Sun, 11 Jan 2026 19:16:22 +0200
Subject: [PATCH 7/8] Merge branch 'main' into
 hgh/libcxx/iota_view-support-_int128_t-in-tests


>From e9c7de6853076b2d60e352635bc806665c1f601e Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Sun, 11 Jan 2026 19:17:53 +0200
Subject: [PATCH 8/8] Revert LWG3610 changes

---
 libcxx/docs/Status/Cxx23Issues.csv                  |  2 +-
 libcxx/include/__ranges/iota_view.h                 |  2 +-
 .../range.factories/range.iota.view/size.pass.cpp   | 13 -------------
 3 files changed, 2 insertions(+), 15 deletions(-)

diff --git a/libcxx/docs/Status/Cxx23Issues.csv b/libcxx/docs/Status/Cxx23Issues.csv
index 3bb079da09f8b..cc83a7da9c25e 100644
--- a/libcxx/docs/Status/Cxx23Issues.csv
+++ b/libcxx/docs/Status/Cxx23Issues.csv
@@ -143,7 +143,7 @@
 "`LWG3598 <https://wg21.link/LWG3598>`__","``system_category().default_error_condition(0)`` is underspecified","2022-02 (Virtual)","","","`#104945 <https://github.com/llvm/llvm-project/issues/104945>`__",""
 "`LWG3601 <https://wg21.link/LWG3601>`__","common_iterator's postfix-proxy needs ``indirectly_readable`` ","2022-02 (Virtual)","","","`#104946 <https://github.com/llvm/llvm-project/issues/104946>`__",""
 "`LWG3607 <https://wg21.link/LWG3607>`__","``contiguous_iterator`` should not be allowed to have custom ``iter_move`` and ``iter_swap`` behavior","2022-02 (Virtual)","|Nothing To Do|","","`#104947 <https://github.com/llvm/llvm-project/issues/104947>`__",""
-"`LWG3610 <https://wg21.link/LWG3610>`__","``iota_view::size`` sometimes rejects integer-class types","2022-02 (Virtual)","|Complete|","22","`#104948 <https://github.com/llvm/llvm-project/issues/104948>`__",""
+"`LWG3610 <https://wg21.link/LWG3610>`__","``iota_view::size`` sometimes rejects integer-class types","2022-02 (Virtual)","","","`#104948 <https://github.com/llvm/llvm-project/issues/104948>`__",""
 "`LWG3612 <https://wg21.link/LWG3612>`__","Inconsistent pointer alignment in ``std::format`` ","2022-02 (Virtual)","|Complete|","14","`#104949 <https://github.com/llvm/llvm-project/issues/104949>`__",""
 "`LWG3616 <https://wg21.link/LWG3616>`__","LWG 3498 seems to miss the non-member ``swap`` for ``basic_syncbuf`` ","2022-02 (Virtual)","|Complete|","18","`#104950 <https://github.com/llvm/llvm-project/issues/104950>`__",""
 "`LWG3618 <https://wg21.link/LWG3618>`__","Unnecessary ``iter_move`` for ``transform_view::iterator`` ","2022-02 (Virtual)","|Complete|","19","`#104951 <https://github.com/llvm/llvm-project/issues/104951>`__",""
diff --git a/libcxx/include/__ranges/iota_view.h b/libcxx/include/__ranges/iota_view.h
index 29f96545ab34f..6b2576ec6b23d 100644
--- a/libcxx/include/__ranges/iota_view.h
+++ b/libcxx/include/__ranges/iota_view.h
@@ -357,7 +357,7 @@ class iota_view : public view_interface<iota_view<_Start, _BoundSentinel>> {
 
   [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
     requires(same_as<_Start, _BoundSentinel> && __advanceable<_Start>) ||
-            (__integer_like<_Start> && __integer_like<_BoundSentinel>) || sized_sentinel_for<_BoundSentinel, _Start>
+            (integral<_Start> && integral<_BoundSentinel>) || sized_sentinel_for<_BoundSentinel, _Start>
   {
     if constexpr (__integer_like<_Start> && __integer_like<_BoundSentinel>) {
       return (__value_ < 0)
diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/size.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/size.pass.cpp
index 2b20e010fa2f5..8563b85f65dbd 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/size.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/size.pass.cpp
@@ -16,12 +16,8 @@
 #include <ranges>
 
 #include "test_macros.h"
-#include "type_algorithms.h"
 #include "types.h"
 
-template <typename T>
-concept HasSize = requires(const T t) { t.size(); };
-
 constexpr bool test() {
   // Both are integer like and both are less than zero.
   {
@@ -103,15 +99,6 @@ constexpr bool test() {
     assert(sz == 10);
   }
 
-  // LWG3610: `iota_view::size` sometimes rejects integer-class types
-  {
-    types::for_each(types::integer_types{}, []<typename IntegerLikeT>() {
-      types::for_each(types::integer_types{}, []<typename BoundT>() {
-        static_assert(HasSize<std::ranges::iota_view<IntegerLikeT, BoundT>>);
-      });
-    });
-  }
-
   return true;
 }
 



More information about the libcxx-commits mailing list