]> gcc.gnu.org Git - gcc.git/commitdiff
libstdc++: Add ranges::range_common_reference_t for C++20 (LWG 3860)
authorJonathan Wakely <jwakely@redhat.com>
Wed, 12 Jun 2024 14:02:14 +0000 (15:02 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Thu, 13 Jun 2024 13:08:36 +0000 (14:08 +0100)
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.

libstdc++-v3/include/bits/ranges_base.h
libstdc++-v3/testsuite/std/ranges/range.cc

index 23c0b56ff225fa5a0bbaa80897e265e8cac3c7b1..63eb552b48bb3043fc8c390a5b4a27399edddb9b 100644 (file)
@@ -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>
index 1843565913756971ac2daf7f4aa03a683720830b..760f6ffacfdb943b8c38d9a59ef3cd87437f9925 100644 (file)
@@ -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&> );
This page took 0.058595 seconds and 5 git commands to generate.