On this page
std::ranges::view_interface<D>::empty
|
(1) | (since C++20) |
|
(2) | (since C++20) |
The default implementation of empty() member function checks whether the object of the derived type's size is 0 (if valid), or whether the beginning iterator and the sentinel compare equal.
derived be a reference bound to static_cast<D&>(*this). Equivalent to return ranges::size(derived) == 0; if D satisfies sized_range. Otherwise, equivalent to return ranges::begin(derived) == ranges::end(derived);.
derived is static_cast<const D&>(*this).
Parameters
(none)
Return value
true if the size of the object of the derived type is 0 (if D satisfies std::ranges::sized_range), or its beginning iterator and the sentinel compare equal, false otherwise.
Notes
Following derived types may use the default implementation of empty:
std::ranges::common_viewstd::ranges::drop_viewstd::ranges::drop_while_viewstd::ranges::elements_viewstd::ranges::filter_viewstd::ranges::join_viewstd::ranges::lazy_split_viewstd::ranges::reverse_viewstd::ranges::single_viewstd::ranges::split_viewstd::ranges::take_viewstd::ranges::take_while_viewstd::ranges::transform_view
Although std::ranges::basic_istream_view inherits from std::ranges::view_interface and does not declare the empty() member function, it cannot use the default implementation, because it never satisfies neither std::ranges::sized_range nor std::ranges::forward_range.
Example
#include <array>
#include <ranges>
int main()
{
constexpr std::array a{0, 1, 2, 3, 4};
static_assert(!std::ranges::single_view(a).empty());
static_assert((a | std::views::take(0)).empty());
static_assert(!(a | std::views::take(5)).empty());
static_assert((a | std::views::drop(5)).empty());
static_assert(!(a | std::views::drop(3)).empty());
static_assert(std::views::iota(0,0).empty());
static_assert(!std::views::iota(0).empty());
}
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3715 | C++20 | empty() only supported forward_range types |
sized_range-only types are also supported |
See also
|
(C++17)
|
checks whether the container is empty (function template) |
|
(C++20)
|
checks whether a range is empty (customization point object) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/ranges/view_interface/empty