diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2024-06-12 15:02:14 +0100 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2024-06-13 14:08:36 +0100 |
commit | 92b554a8412624a0aa3ca9b502976ebec7eff34e (patch) | |
tree | 46350e29ab52ce7d78271bc54936c7b35e72161d | |
parent | 0755b2304bac9579fd5da337da8f861ccb1b042b (diff) | |
download | gcc-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.h | 6 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/std/ranges/range.cc | 6 |
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&> ); |