[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