diff --git a/source/ranges.tex b/source/ranges.tex index bffc0fde18..ed9d107f00 100644 --- a/source/ranges.tex +++ b/source/ranges.tex @@ -138,7 +138,7 @@ // \ref{view.interface}, class template \tcode{view_interface} template requires is_class_v && @\libconcept{same_as}@> - class view_interface; + class view_interface; // partially freestanding // \ref{range.subrange}, sub-ranges enum class @\libglobal{subrange_kind}@ : bool { @\libmember{unsized}{subrange_kind}@, @\libmember{sized}{subrange_kind}@ }; @@ -1868,6 +1868,11 @@ constexpr decltype(auto) operator[](range_difference_t n) const { return ranges::begin(@\exposid{derived}@())[n]; } + + template<@\libconcept{random_access_range}@ R = D> requires @\libconcept{sized_range}@ // freestanding-deleted + constexpr decltype(auto) at(range_difference_t n); + template<@\libconcept{random_access_range}@ R = const D> requires @\libconcept{sized_range}@ // freestanding-deleted + constexpr decltype(auto) at(range_difference_t n) const; }; } \end{codeblock} @@ -1914,6 +1919,25 @@ Equivalent to: \tcode{return *ranges::prev(ranges::end(\exposid{derived}()));} \end{itemdescr} +\indexlibrarymember{at}{view_interface}% +\begin{itemdecl} +template<@\libconcept{random_access_range}@ R = D> requires @\libconcept{sized_range}@ + constexpr decltype(auto) at(range_difference_t n); +template<@\libconcept{random_access_range}@ R = const D> requires @\libconcept{sized_range}@ + constexpr decltype(auto) at(range_difference_t n) const; +\end{itemdecl} + +\begin{itemdescr} +\pnum +\returns +\tcode{(*this)[n]}. + +\pnum +\throws +\tcode{out_of_range} if \tcode{n < 0} is \tcode{true} or +\tcode{n >= ranges::distance(\exposid{derived}())} is \tcode{true}. +\end{itemdescr} + \rSec2[range.subrange]{Sub-ranges} \rSec3[range.subrange.general]{General} diff --git a/source/support.tex b/source/support.tex index 70028e6719..0b65defb62 100644 --- a/source/support.tex +++ b/source/support.tex @@ -885,6 +885,7 @@ #define @\defnlibxname{cpp_lib_unwrap_ref}@ 201811L // freestanding, also in \libheader{type_traits} #define @\defnlibxname{cpp_lib_valarray}@ 202511L // also in \libheader{valarray} #define @\defnlibxname{cpp_lib_variant}@ 202306L // also in \libheader{variant} +#define @\defnlibxname{cpp_lib_view_interface}@ 202606L // also in \libheader{ranges} #define @\defnlibxname{cpp_lib_void_t}@ 201411L // freestanding, also in \libheader{type_traits} \end{codeblock}