diff --git a/libcxx/docs/Status/Cxx2bIssues.csv b/libcxx/docs/Status/Cxx2bIssues.csv index 1e7a6110d79a38..4e9d2eda66eda9 100644 --- a/libcxx/docs/Status/Cxx2bIssues.csv +++ b/libcxx/docs/Status/Cxx2bIssues.csv @@ -273,7 +273,7 @@ "`3851 `__","``chunk_view::inner-iterator`` missing custom ``iter_move`` and ``iter_swap``","February 2023","","","|ranges|" "`3853 `__","``basic_const_iterator::operator->`` is ill-formed","February 2023","","","" "`3857 `__","``basic_string_view`` should allow explicit conversion when only traits vary","February 2023","|Complete|","17.0","" -"`3860 `__","``range_common_reference_t`` is missing","February 2023","","","|ranges|" +"`3860 `__","``range_common_reference_t`` is missing","February 2023","|Complete|","17.0","|ranges|" "`3866 `__","Bad Mandates for ``expected::transform_error`` overloads","February 2023","","","" "`3867 `__","Should ``std::basic_osyncstream``'s move assignment operator be ``noexcept``?","February 2023","","","" "`3441 `__","Misleading note about calls to customization points","February 2023","","","" diff --git a/libcxx/include/__ranges/concepts.h b/libcxx/include/__ranges/concepts.h index 58b1954a5835af..b87a7146061083 100644 --- a/libcxx/include/__ranges/concepts.h +++ b/libcxx/include/__ranges/concepts.h @@ -73,6 +73,9 @@ namespace ranges { template using range_rvalue_reference_t = iter_rvalue_reference_t>; + template + using range_common_reference_t = iter_common_reference_t>; + // [range.sized] template concept sized_range = range<_Tp> && requires(_Tp& __t) { ranges::size(__t); }; diff --git a/libcxx/include/ranges b/libcxx/include/ranges index f999fa00c3356e..c804709339e0b5 100644 --- a/libcxx/include/ranges +++ b/libcxx/include/ranges @@ -49,6 +49,8 @@ namespace std::ranges { using range_reference_t = iter_reference_t>; template using range_rvalue_reference_t = iter_rvalue_reference_t>; + template + using range_common_reference_t = iter_common_reference_t>; // [range.sized], sized ranges template 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 1cc94035a9d903..1367e297a62528 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 // using range_rvalue_reference_t = iter_rvalue_reference_t>; +// template +// using range_common_reference_t = iter_common_reference_t>; + #include #include @@ -27,9 +30,8 @@ #include "test_iterators.h" #include "test_range.h" - - static_assert(std::same_as >, std::iter_difference_t >); static_assert(std::same_as >, std::iter_value_t >); static_assert(std::same_as >, std::iter_reference_t >); static_assert(std::same_as >, std::iter_rvalue_reference_t >); +static_assert(std::same_as >, std::iter_common_reference_t >);