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.
-- >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