# std::ranges::ref_view

From cppreference.com
< cpp‎ | ranges

Defined in header `<ranges>` |  |
template<Range R> requires std::is_object_v<R> class ref_view : public ranges::view_interface<ref_view<R>> |  | (since C++20)

`ref_view` is a `View` of the elements of some other `Range`. It wraps a reference to that `Range`.

### Data members

## std::ranges::ref_view::r_

R* r_ = nullptr; /* exposition-only */ |  |

pointer to the referenced range

### Member functions

## std::ranges::ref_view::ref_view

constexpr ref_view() noexcept = default; | (1) |
template<__NotSameAs<ref_view> T> requires /* see below */ constexpr ref_view(T&& t); | (2) |

1) Initializes `r_` with nullptr. A default-initialized `ref_view` references no `Range`.
2) Initializes `r_` with std::addressof(static_cast<R&>(std::forward<T>(t))).

`__NotSameAs` is an exposition-only helper concept.

The expression in the requires-clause of (2) is equivalent to ConvertibleTo<T, R&> && requires { FUN(declval<T>()); }, where the exposition-only functions `FUN` are declared as void FUN(R&); void FUN(R&&) = delete;.

### Parameters

t | - | range to reference

## std::ranges::rev_view::base

constexpr R& base() const; |  |

Equivalent to return *r_;

## std::ranges::ref_view::begin

constexpr iterator_t<R> begin() const; |  |

Equivalent to return ranges::begin(*r_);

## std::ranges::ref_view::end

constexpr sentinel_t<R> end() const; |  |

Equivalent to return ranges::end(*r_);

## std::ranges::ref_view::empty

constexpr bool empty() const requires requires { ranges::empty(*r_); }; |  |

Equivalent to return ranges::empty(*r_);

## std::ranges::ref_view::size

constexpr auto size() const requires SizedRange<R> { return ranges::size(*r_); } |  |

## std::ranges::ref_view::data

constexpr auto data() const requires ContiguousRange<R> { return ranges::data(*r_); } |  |

### Non-member functions

## begin, end(std::ranges::ref_view)

friend constexpr iterator_t<R> begin(ref_view r); | (1) |
friend constexpr sentinel_t<R> end(ref_view r); | (2) |

1) Equivalent to return r.begin();
2) Equivalent to return r.end();

These functions are not visible to ordinary unqualified or qualified lookup, and can only be found by argument-dependent lookup when `std::ranges::ref_view<R>` is an associated class of the arguments.

### Deduction guides

template<class R> ref_view(R&) -> ref_view<R>; |  |

### Example

| This section is incomplete Reason: no example

### See also

reference_wrapper (C++11) | CopyConstructible and CopyAssignable reference wrapper (class template)
all_view view::all | a `View` that includes all elements of a `Range` (alias template) (range adaptor object)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/ranges/ref_view&oldid=110359"