https://gcc.gnu.org/g:361050589b144913ec05d9d8e10639afa98319a8

commit r15-5290-g361050589b144913ec05d9d8e10639afa98319a8
Author: Patrick Palka <ppa...@redhat.com>
Date:   Thu Nov 14 13:27:41 2024 -0500

    libstdc++: Implement LWG 3563 changes to keys_view and values_view
    
    This LWG issue corrects the definition of these alias templates to make
    them suitable for alias CTAD.
    
    libstdc++-v3/ChangeLog:
    
            * include/std/ranges (keys_view): Adjust as per LWG 3563.
            (values_view): Likewise.
            * testsuite/std/ranges/adaptors/elements.cc (test08): New test.
    
    Reviewed-by: Jonathan Wakely <jwak...@redhat.com>

Diff:
---
 libstdc++-v3/include/std/ranges                        |  6 ++++--
 libstdc++-v3/testsuite/std/ranges/adaptors/elements.cc | 14 ++++++++++++++
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges
index 743429dbceae..5153dcc26c4f 100644
--- a/libstdc++-v3/include/std/ranges
+++ b/libstdc++-v3/include/std/ranges
@@ -4551,11 +4551,13 @@ namespace views::__adaptor
     inline constexpr bool enable_borrowed_range<elements_view<_Tp, _Nm>>
       = enable_borrowed_range<_Tp>;
 
+  // _GLIBCXX_RESOLVE_LIB_DEFECTS
+  // 3563. keys_view example is broken
   template<typename _Range>
-    using keys_view = elements_view<views::all_t<_Range>, 0>;
+    using keys_view = elements_view<_Range, 0>;
 
   template<typename _Range>
-    using values_view = elements_view<views::all_t<_Range>, 1>;
+    using values_view = elements_view<_Range, 1>;
 
   namespace views
   {
diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/elements.cc 
b/libstdc++-v3/testsuite/std/ranges/adaptors/elements.cc
index a15192bf0ecf..0a05ce7378f9 100644
--- a/libstdc++-v3/testsuite/std/ranges/adaptors/elements.cc
+++ b/libstdc++-v3/testsuite/std/ranges/adaptors/elements.cc
@@ -148,6 +148,19 @@ test07()
   b == e;
 }
 
+void
+test08()
+{
+  // LWG 3563 - keys_view example is broken
+  std::pair<int, int> x[] = {{1,2},{3,4}};
+  auto v = ranges::keys_view{views::all(x)};
+  auto w = ranges::values_view{views::all(x)};
+  using ty1 = decltype(v);
+  using ty1 = ranges::elements_view<views::all_t<decltype((x))>, 0>;
+  using ty2 = decltype(w);
+  using ty2 = ranges::elements_view<views::all_t<decltype((x))>, 1>;
+}
+
 int
 main()
 {
@@ -158,4 +171,5 @@ main()
   test05();
   test06();
   test07();
+  test08();
 }

Reply via email to