aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Palka <ppalka@redhat.com>2024-11-14 13:27:41 -0500
committerPatrick Palka <ppalka@redhat.com>2024-11-14 13:27:41 -0500
commit361050589b144913ec05d9d8e10639afa98319a8 (patch)
treeab33c08418de5e3e6721b8d7a53824f546d58a56
parent4a3a0be34f723df192361e43bb48b9292dfe3a54 (diff)
downloadgcc-361050589b144913ec05d9d8e10639afa98319a8.zip
gcc-361050589b144913ec05d9d8e10639afa98319a8.tar.gz
gcc-361050589b144913ec05d9d8e10639afa98319a8.tar.bz2
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 <jwakely@redhat.com>
-rw-r--r--libstdc++-v3/include/std/ranges6
-rw-r--r--libstdc++-v3/testsuite/std/ranges/adaptors/elements.cc14
2 files changed, 18 insertions, 2 deletions
diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges
index 743429d..5153dcc 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 a15192b..0a05ce7 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();
}