5.0 KiB
[range.elements.view]
25 Ranges library [ranges]
25.7 Range adaptors [range.adaptors]
25.7.23 Elements view [range.elements]
25.7.23.2 Class template elements_view [range.elements.view]
namespace std::ranges {template<class T, size_t N>concept has-tuple-element = // exposition onlytuple-like && N < tuple_size_v; template<class T, size_t N>concept returnable-element = // exposition only is_reference_v || move_constructible<tuple_element_t<N, T>>; template<input_range V, size_t N>requires view && has-tuple-element<range_value_t, N> &&has-tuple-element<remove_reference_t<range_reference_t>, N> &&returnable-element<range_reference_t, N>class elements_view : public view_interface<elements_view<V, N>> {public: elements_view() requires default_initializable = default; constexpr explicit elements_view(V base); constexpr V base() const & requires copy_constructible { return base_; }constexpr V base() && { return std::move(base_); }constexpr auto begin() requires (){ return iterator(ranges::begin(base_)); }constexpr auto begin() const requires range{ return iterator(ranges::begin(base_)); }constexpr auto end() requires (
&&
){ return sentinel{ranges::end(base_)}; }constexpr auto end() requires (
&& common_range){ return iterator{ranges::end(base_)}; }constexpr auto end() const requires range{ return sentinel{ranges::end(base_)}; }constexpr auto end() const requires common_range{ return iterator{ranges::end(base_)}; }constexpr auto size() requires sized_range{ return ranges::size(base_); }constexpr auto size() const requires sized_range{ return ranges::size(base_); }constexpr auto reserve_hint() requires approximately_sized_range{ return ranges::reserve_hint(base_); }constexpr auto reserve_hint() const requires approximately_sized_range{ return ranges::reserve_hint(base_); }private:// [range.elements.iterator], class template elements_view::iteratortemplate class iterator; // exposition only// [range.elements.sentinel], class template elements_view::sentineltemplate class sentinel; // exposition only V base_ = V(); // exposition only};}
constexpr explicit elements_view(V base);
Effects: Initializes base_ with std::move(base).