libstdc++: Implement LWG 3796 changes to repeat_/chunk_by_view [PR109024]
authorPatrick Palka <ppalka@redhat.com>
Thu, 9 Mar 2023 18:37:29 +0000 (13:37 -0500)
committerPatrick Palka <ppalka@redhat.com>
Thu, 9 Mar 2023 18:37:29 +0000 (13:37 -0500)
PR libstdc++/109024

libstdc++-v3/ChangeLog:

* include/std/ranges (chunk_by_view::_M_pred): Remove DMI as per
LWG 3796.
(repeat_view::_M_pred): Likewise.
* testsuite/std/ranges/adaptors/chunk_by/1.cc (test03): New test.
* testsuite/std/ranges/repeat/1.cc (test05): New test.

libstdc++-v3/include/std/ranges
libstdc++-v3/testsuite/std/ranges/adaptors/chunk_by/1.cc
libstdc++-v3/testsuite/std/ranges/repeat/1.cc

index 867844e..f680941 100644 (file)
@@ -6735,7 +6735,7 @@ namespace views::__adaptor
   class chunk_by_view : public view_interface<chunk_by_view<_Vp, _Pred>>
   {
     _Vp _M_base = _Vp();
-    __detail::__box<_Pred> _M_pred = _Pred();
+    __detail::__box<_Pred> _M_pred;
     __detail::_CachedPosition<_Vp> _M_cached_begin;
 
     constexpr iterator_t<_Vp>
@@ -7411,7 +7411,7 @@ namespace views::__adaptor
       && (__detail::__is_integer_like<_Bound> || same_as<_Bound, unreachable_sentinel_t>))
   class repeat_view : public view_interface<repeat_view<_Tp, _Bound>>
   {
-    __detail::__box<_Tp> _M_value = _Tp();
+    __detail::__box<_Tp> _M_value;
     [[no_unique_address]] _Bound _M_bound = _Bound();
 
     struct _Iterator;
index cba6fad..f165c7d 100644 (file)
@@ -54,9 +54,17 @@ test02()
   VERIFY( i == v.end() );
 }
 
+void
+test03()
+{
+  // LWG 3796
+  ranges::chunk_by_view<ranges::empty_view<int>, ranges::equal_to> r;
+}
+
 int
 main()
 {
   static_assert(test01());
   test02();
+  test03();
 }
index 2f3ad45..07b7089 100644 (file)
@@ -120,6 +120,13 @@ test04()
   return true;
 }
 
+void
+test05()
+{
+  // LWG 3796
+  ranges::repeat_view<int> r;
+}
+
 int
 main()
 {
@@ -127,4 +134,5 @@ main()
   static_assert(test02());
   static_assert(test03());
   static_assert(test04());
+  test05();
 }