aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2024-06-12 15:02:14 +0100
committerJonathan Wakely <jwakely@redhat.com>2024-06-13 14:08:36 +0100
commit92b554a8412624a0aa3ca9b502976ebec7eff34e (patch)
tree46350e29ab52ce7d78271bc54936c7b35e72161d
parent0755b2304bac9579fd5da337da8f861ccb1b042b (diff)
downloadgcc-92b554a8412624a0aa3ca9b502976ebec7eff34e.zip
gcc-92b554a8412624a0aa3ca9b502976ebec7eff34e.tar.gz
gcc-92b554a8412624a0aa3ca9b502976ebec7eff34e.tar.bz2
libstdc++: Add ranges::range_common_reference_t for C++20 (LWG 3860)
LWG 3860 added this alias template. Both libc++ and MSVC treat this as a DR for C++20, so this change does so too. libstdc++-v3/ChangeLog: * include/bits/ranges_base.h (range_common_reference_t): New alias template, as per LWG 3860. * testsuite/std/ranges/range.cc: Check it.
-rw-r--r--libstdc++-v3/include/bits/ranges_base.h6
-rw-r--r--libstdc++-v3/testsuite/std/ranges/range.cc6
2 files changed, 12 insertions, 0 deletions
diff --git a/libstdc++-v3/include/bits/ranges_base.h b/libstdc++-v3/include/bits/ranges_base.h
index 23c0b56..63eb552 100644
--- a/libstdc++-v3/include/bits/ranges_base.h
+++ b/libstdc++-v3/include/bits/ranges_base.h
@@ -537,6 +537,12 @@ namespace ranges
using range_rvalue_reference_t
= iter_rvalue_reference_t<iterator_t<_Range>>;
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 3860. range_common_reference_t is missing
+ template<range _Range>
+ using range_common_reference_t
+ = iter_common_reference_t<iterator_t<_Range>>;
+
/// [range.sized] The sized_range concept.
template<typename _Tp>
concept sized_range = range<_Tp>
diff --git a/libstdc++-v3/testsuite/std/ranges/range.cc b/libstdc++-v3/testsuite/std/ranges/range.cc
index 1843565..760f6ff 100644
--- a/libstdc++-v3/testsuite/std/ranges/range.cc
+++ b/libstdc++-v3/testsuite/std/ranges/range.cc
@@ -83,3 +83,9 @@ static_assert( same_as<std::ranges::range_rvalue_reference_t<I>,
char&&> );
static_assert( same_as<std::ranges::range_rvalue_reference_t<O>,
WritableObject<char>> );
+
+// LWG 3860. range_common_reference_t is missing
+static_assert( same_as<std::ranges::range_common_reference_t<C>,
+ char&> );
+static_assert( same_as<std::ranges::range_common_reference_t<I>,
+ char&> );