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
is true, the behavior is undefined.
(until C++26)If
is true:
If the implementation is
, a
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
in the standard library provides their own back() member function.
However, following derived types cannot use the default implementations, as they never satisfy neither
nor
:
std::ranges::basic_istream_view
std::ranges::lazy_split_view
The inherited back() member function is available for
, 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)
(C++20)
returns a reverse iterator to a range
(customization point object)
(C++20)
returns a reverse iterator to a read-only range
(customization point object)