Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
constexpr bool empty ( )
требует ranges:: sized_range < D > || ranges:: forward_range < D > ;
(1) (начиная с C++20)
constexpr bool empty ( ) const
требует ranges:: sized_range < const D > || ranges:: forward_range < const D > ;
(2) (начиная с C++20)

Реализация по умолчанию функции-члена empty() проверяет, равен ли размер объекта производного типа 0 (если это допустимо), или равны ли начальный итератор и страж при сравнении.

1) Пусть derived будет ссылкой, привязанной к static_cast < D & > ( * this ) . Эквивалентно return ranges:: size ( derived ) == 0 ; если D удовлетворяет sized_range . Иначе эквивалентно return ranges:: begin ( derived ) == ranges:: end ( derived ) ; .
2) То же, что и (1) , за исключением того, что derived является static_cast < const D & > ( * this ) .

Содержание

Возвращаемое значение

true если размер объекта производного типа равен 0 (если D удовлетворяет std::ranges::sized_range ), или его начальный итератор и страж-элемент сравниваются как равные, false в противном случае.

Примечания

Следующие производные типы могут использовать реализацию по умолчанию для empty :

(начиная с C++23)
(начиная с C++26)

Хотя std::ranges::basic_istream_view наследует от std::ranges::view_interface и не объявляет функцию-член empty() , он не может использовать реализацию по умолчанию, поскольку никогда не удовлетворяет ни std::ranges::sized_range , ни std::ranges::forward_range .

Пример

#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());
}

Отчёты о дефектах

Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение как опубликовано Корректное поведение
LWG 3715 C++20 empty() поддерживало только типы forward_range также поддерживаются типы только sized_range

Смотрите также

(C++17)
проверяет, является ли контейнер пустым
(шаблон функции)
проверяет, является ли диапазон пустым
(объект точки кастомизации)