std::ranges::view_interface<D>::back - cppreference.com

From cppreference.com

constexprdecltype(auto)back()requiresranges::bidirectional_range<D>&&ranges::common_range<D>; (1) (since C++20)constexprdecltype(auto)back()constrequiresranges::bidirectional_range<constD>&&ranges::common_range<constD>; (2) (since C++20)The default implementation of back() member function returns the last element in the view of the derived type. Whether the element is returned by value or by reference depends on the operator* of the iterator type.

Equivalent to return*ranges::prev(ranges::end(derived));, where derived is:

1)static_cast<D&>(*this)

2)static_cast<constD&>(*this)

If

empty()

is true, the behavior is undefined.

(until C++26)If

empty()

is true:

If the implementation is

hardened

, a

contract violation

occurs.

If the implementation is not hardened, the behavior is undefined.

(since C++26)Return value

The last element in the view.

Notes

In C++20, no type derived from

std::ranges::view_interface

in the standard library provides their own back() member function.

However, following derived types cannot use the default implementations, as they never satisfy neither

bidirectional_range

nor

common_range

:

std::ranges::basic_istream_view

std::ranges::lazy_split_view

std::ranges::split_view

std::ranges::take_while_view

The inherited back() member function is available for

std::ranges::empty_view

, but a call to it always results in undefined behavior.

Example

See also

(C++14)

returns a reverse iterator to the beginning of a container or array
(function template)

[edit]

(C++20)

returns a reverse iterator to a range
(customization point object)

[edit]

(C++20)

returns a reverse iterator to a read-only range
(customization point object)

[edit]