On Thu, 14 Nov 2024 at 16:18, Patrick Palka <ppa...@redhat.com> wrote: > > Tested on x86_64-pc-linux-gnu, does this look OK for trunk and perhaps > 14/13? IIRC alias CTAD didn't work correctly in 12 so it's not worth > backportig there.
OK for trunk and 13/14, thanks. > > -- >8 -- > > This LWG issue corrects the definition of these alias templates to make > them eligible 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. > --- > libstdc++-v3/include/std/ranges | 6 ++++-- > .../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 cebe10683f9..0039cc0c876 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 > + // LWG 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 a15192bf0ec..0a05ce7378f 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(); > } > -- > 2.47.0.287.g25b0f41288 >