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