Namespaces
Variants
Actions

std::ranges::view_interface<D>::empty

From cppreference.com
 
C++
 
Ranges library
Range adaptors
 
std::ranges::view_interface
constexpr bool empty()
    requires ranges::sized_range<D> || ranges::forward_range<D>;
(1) (since C++20)
constexpr bool empty() const
    requires ranges::sized_range<const D> || ranges::forward_range<const D>;
(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.

1) Let 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);.
2) Same as (1), except that derived is static_cast<const D&>(*this).

Contents

[edit] 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.

[edit] Notes

Following derived types may use the default implementation of empty:

(since C++23)
(since C++26)

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.

[edit] 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();
}

[edit] 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

[edit] See also

(C++17)
checks whether the container is empty
(function template) [edit]
checks whether a range is empty
(customization point object)[edit]

Follow Lee on X/Twitter - Father, Husband, Serial builder creating AI, crypto, games & web tools. We are friends :) AI Will Come To Life!

Check out: eBank.nz (Art Generator) | Netwrck.com (AI Tools) | Text-Generator.io (AI API) | BitBank.nz (Crypto AI) | ReadingTime (Kids Reading) | RewordGame | BigMultiplayerChess | WebFiddle | How.nz | Helix AI Assistant