User:Cooky/ranges/as const view

@1@ A range adaptor that represents a view of underlying whose elements are not modifiable.

@2@ Range adaptor object. Let be a subexpression, let  be, and let  be. Then the expression is expression-equivalent to:
 * , if it is a well-formed expression and satisfies ;
 * otherwise, for some type  and some extent  if  denotes ;
 * otherwise, if  is an lvalue,  satisfies, and  does not satisfy.
 * otherwise.

Data members
Typical implementations of only hold one non-static data member:
 * the underlying view of type (shown here as, the name is exposition only).

Member functions
{{member | {{small|std::ranges::as_const_view::}}as_const_view | {{dcl begin}} {{dcl | num=1 | since=c++23 |1= as_const_view requires std::default_initializable = default; }} {{dcl | num=2 | since=c++23 | constexpr explicit as_const_view(V base); }} {{dcl end}}

@1@ Value-initializes {{tt|base_}} via its default member initializer ({{c|1== V}}). @2@ Initializes {{tt|base_}} with {{c|std::move(base)}}.

Parameters
}}

Helper templates
This specialization of makes  satisfy  when the underlying view satisfies it.