From: Jonathan Wakely Date: Wed, 12 Jun 2024 14:02:14 +0000 (+0100) Subject: libstdc++: Add ranges::range_common_reference_t for C++20 (LWG 3860) X-Git-Tag: releases/gcc-14.3.0~305 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b37d9e538123c71c6e3478ed902561131d1bf0be;p=thirdparty%2Fgcc.git 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. (cherry picked from commit 92b554a8412624a0aa3ca9b502976ebec7eff34e) --- diff --git a/libstdc++-v3/include/bits/ranges_base.h b/libstdc++-v3/include/bits/ranges_base.h index 67ac8db8b46..937fbbae12e 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>; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3860. range_common_reference_t is missing + template + using range_common_reference_t + = iter_common_reference_t>; + /// [range.sized] The sized_range concept. template concept sized_range = range<_Tp> diff --git a/libstdc++-v3/testsuite/std/ranges/range.cc b/libstdc++-v3/testsuite/std/ranges/range.cc index 18435659137..760f6ffacfd 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, char&&> ); static_assert( same_as, WritableObject> ); + +// LWG 3860. range_common_reference_t is missing +static_assert( same_as, + char&> ); +static_assert( same_as, + char&> );