[libcxx-commits] [libcxx] a8ead91 - [libc++][ranges] Implement LWG-3860 range_common_reference_t is missing

Igor Zhukov via libcxx-commits libcxx-commits at lists.llvm.org
Mon Feb 27 05:50:33 PST 2023


Author: Igor Zhukov
Date: 2023-02-27T20:49:12+07:00
New Revision: a8ead9194cfb18922408404c8cabfa83c276944f

URL: https://github.com/llvm/llvm-project/commit/a8ead9194cfb18922408404c8cabfa83c276944f
DIFF: https://github.com/llvm/llvm-project/commit/a8ead9194cfb18922408404c8cabfa83c276944f.diff

LOG: [libc++][ranges] Implement LWG-3860 range_common_reference_t is missing

Added: 
    

Modified: 
    libcxx/docs/Status/Cxx2bIssues.csv
    libcxx/include/__ranges/concepts.h
    libcxx/include/ranges
    libcxx/test/std/ranges/range.req/range.range/helper_aliases.compile.pass.cpp

Removed: 
    


################################################################################
diff  --git a/libcxx/docs/Status/Cxx2bIssues.csv b/libcxx/docs/Status/Cxx2bIssues.csv
index 1e7a6110d79a..4e9d2eda66ed 100644
--- a/libcxx/docs/Status/Cxx2bIssues.csv
+++ b/libcxx/docs/Status/Cxx2bIssues.csv
@@ -273,7 +273,7 @@
 "`3851 <https://wg21.link/LWG3851>`__","``chunk_view::inner-iterator`` missing custom ``iter_move`` and ``iter_swap``","February 2023","","","|ranges|"
 "`3853 <https://wg21.link/LWG3853>`__","``basic_const_iterator<volatile int*>::operator->`` is ill-formed","February 2023","","",""
 "`3857 <https://wg21.link/LWG3857>`__","``basic_string_view`` should allow explicit conversion when only traits vary","February 2023","|Complete|","17.0",""
-"`3860 <https://wg21.link/LWG3860>`__","``range_common_reference_t`` is missing","February 2023","","","|ranges|"
+"`3860 <https://wg21.link/LWG3860>`__","``range_common_reference_t`` is missing","February 2023","|Complete|","17.0","|ranges|"
 "`3866 <https://wg21.link/LWG3866>`__","Bad Mandates for ``expected::transform_error`` overloads","February 2023","","",""
 "`3867 <https://wg21.link/LWG3867>`__","Should ``std::basic_osyncstream``'s move assignment operator be ``noexcept``?","February 2023","","",""
 "`3441 <https://wg21.link/LWG3441>`__","Misleading note about calls to customization points","February 2023","","",""

diff  --git a/libcxx/include/__ranges/concepts.h b/libcxx/include/__ranges/concepts.h
index 58b1954a5835..b87a71460610 100644
--- a/libcxx/include/__ranges/concepts.h
+++ b/libcxx/include/__ranges/concepts.h
@@ -73,6 +73,9 @@ namespace ranges {
   template <range _Rp>
   using range_rvalue_reference_t = iter_rvalue_reference_t<iterator_t<_Rp>>;
 
+  template <range _Rp>
+  using range_common_reference_t = iter_common_reference_t<iterator_t<_Rp>>;
+
   // [range.sized]
   template <class _Tp>
   concept sized_range = range<_Tp> && requires(_Tp& __t) { ranges::size(__t); };

diff  --git a/libcxx/include/ranges b/libcxx/include/ranges
index f999fa00c335..c804709339e0 100644
--- a/libcxx/include/ranges
+++ b/libcxx/include/ranges
@@ -49,6 +49,8 @@ namespace std::ranges {
     using range_reference_t = iter_reference_t<iterator_t<R>>;
   template<range R>
     using range_rvalue_reference_t = iter_rvalue_reference_t<iterator_t<R>>;
+  template <range R>
+    using range_common_reference_t = iter_common_reference_t<iterator_t<R>>;
 
   // [range.sized], sized ranges
   template<class>

diff  --git a/libcxx/test/std/ranges/range.req/range.range/helper_aliases.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.range/helper_aliases.compile.pass.cpp
index 1cc94035a9d9..1367e297a625 100644
--- a/libcxx/test/std/ranges/range.req/range.range/helper_aliases.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.range/helper_aliases.compile.pass.cpp
@@ -20,6 +20,9 @@
 // template<range R>
 // using range_rvalue_reference_t = iter_rvalue_reference_t<iterator_t<R>>;
 
+// template <range R>
+// using range_common_reference_t = iter_common_reference_t<iterator_t<R>>;
+
 #include <ranges>
 
 #include <concepts>
@@ -27,9 +30,8 @@
 #include "test_iterators.h"
 #include "test_range.h"
 
-
-
 static_assert(std::same_as<std::ranges::range_
diff erence_t<test_range<cpp20_input_iterator> >, std::iter_
diff erence_t<int*> >);
 static_assert(std::same_as<std::ranges::range_value_t<test_range<cpp20_input_iterator> >, std::iter_value_t<int*> >);
 static_assert(std::same_as<std::ranges::range_reference_t<test_range<cpp20_input_iterator> >, std::iter_reference_t<int*> >);
 static_assert(std::same_as<std::ranges::range_rvalue_reference_t<test_range<cpp20_input_iterator> >, std::iter_rvalue_reference_t<int*> >);
+static_assert(std::same_as<std::ranges::range_common_reference_t<test_range<cpp20_input_iterator> >, std::iter_common_reference_t<int*> >);


        


More information about the libcxx-commits mailing list