]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Fix missing change to views::pairwise from P2165R4 [PR121956]
authorJonathan Wakely <jwakely@redhat.com>
Tue, 16 Sep 2025 12:41:20 +0000 (13:41 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Tue, 16 Sep 2025 16:38:41 +0000 (17:38 +0100)
ranges::adjacent_view::_Iterator::value_type should have been changed by
r14-8710-g65b4cba9d6a9ff to always produce std::tuple, even for the
N == 2 views::pairwise specialization.

libstdc++-v3/ChangeLog:

PR libstdc++/121956
* include/std/ranges (adjacent_view::_Iterator::value_type):
Always define as std::tuple<T, N>, not std::pair<T, T>.
* testsuite/std/ranges/adaptors/adjacent/1.cc: Check value type
of views::pairwise.

Reviewed-by: Patrick Palka <ppalka@redhat.com>
libstdc++-v3/include/std/ranges
libstdc++-v3/testsuite/std/ranges/adaptors/adjacent/1.cc

index f493da56203b6d8d270f3a82f7d0cc4f11413872..1c76dcc85acd4ea354d26b1ae137ff34aa3ffae9 100644 (file)
@@ -5460,9 +5460,7 @@ namespace views::__adaptor
   public:
     using iterator_category = input_iterator_tag;
     using iterator_concept = decltype(_S_iter_concept());
-    using value_type = conditional_t<_Nm == 2,
-                                    pair<range_value_t<_Base>, range_value_t<_Base>>,
-                                    __detail::__repeated_tuple<range_value_t<_Base>, _Nm>>;
+    using value_type = __detail::__repeated_tuple<range_value_t<_Base>, _Nm>;
     using difference_type = range_difference_t<_Base>;
 
     _Iterator() = default;
index 085cd4a8c54c52d8b5b22874d7b53a80e4d2789e..0a5c67f56140242029bc346ea6111ad08bf14cc3 100644 (file)
@@ -114,6 +114,18 @@ test04()
   return true;
 }
 
+constexpr bool
+test05()
+{
+  // PR libstdc++/121956
+  int a[2]{};
+  __gnu_test::test_random_access_range r(a);
+  auto v = r | views::pairwise;
+  static_assert( std::is_same_v<ranges::range_value_t<decltype(v)>,
+                               std::tuple<int, int>> );
+  return true;
+}
+
 int
 main()
 {
@@ -121,4 +133,5 @@ main()
   static_assert(test02());
   static_assert(test03());
   static_assert(test04());
+  static_assert(test05());
 }