From: Patrick Palka Date: Thu, 14 Nov 2024 18:27:41 +0000 (-0500) Subject: libstdc++: Implement LWG 3563 changes to keys_view and values_view X-Git-Tag: basepoints/gcc-16~4263 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=361050589b144913ec05d9d8e10639afa98319a8;p=thirdparty%2Fgcc.git 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 --- 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> = enable_borrowed_range<_Tp>; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3563. keys_view example is broken template - using keys_view = elements_view, 0>; + using keys_view = elements_view<_Range, 0>; template - using values_view = elements_view, 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 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, 0>; + using ty2 = decltype(w); + using ty2 = ranges::elements_view, 1>; +} + int main() { @@ -158,4 +171,5 @@ main() test05(); test06(); test07(); + test08(); }