Index: libcxx/docs/Status/Cxx2bIssues.csv =================================================================== --- libcxx/docs/Status/Cxx2bIssues.csv +++ 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","","","" Index: libcxx/include/__ranges/concepts.h =================================================================== --- libcxx/include/__ranges/concepts.h +++ libcxx/include/__ranges/concepts.h @@ -73,6 +73,9 @@ 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); }; Index: libcxx/include/ranges =================================================================== --- libcxx/include/ranges +++ libcxx/include/ranges @@ -49,6 +49,8 @@ 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 Index: libcxx/test/std/ranges/range.req/range.range/helper_aliases.compile.pass.cpp =================================================================== --- libcxx/test/std/ranges/range.req/range.range/helper_aliases.compile.pass.cpp +++ 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 >);