Namespaces
Variants

std::ranges::view_interface<D>:: operator bool

From cppreference.net
Ranges library
Range adaptors
constexpr explicit operator bool ( ) requires /* см. ниже */ ;
(1) (начиная с C++20)
constexpr explicit operator bool ( ) const requires /* см. ниже */ ;
(2) (начиная с C++20)

Реализация по умолчанию функции-члена operator bool проверяет, является ли представление непустым. Это делает производный тип контекстно преобразуемым в bool .

1) Пусть derived будет static_cast < D & > ( * this ) . Выражение в requires-клаузе эквивалентно requires { ranges:: empty ( derived ) ; } , а тело функции эквивалентно return ! ranges:: empty ( derived ) ; .
2) То же, что и (1) , за исключением того, что derived является static_cast < const D & > ( * this ) .

Содержание

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

false если значение производного типа пусто (определяется с помощью std::ranges::empty ), true в противном случае.

Примечания

В C++20 ни один тип, производный от std::ranges::view_interface в стандартной библиотеке, не предоставляет собственный operator bool . Почти все эти типы используют реализацию по умолчанию.

Заметным исключением является std::ranges::basic_istream_view . Поскольку его тип итератора никогда не удовлетворяет требованиям forward_iterator , представление не может использовать унаследованный operator bool .

Пример

#include <array>
#include <iostream>
#include <ranges>
int main()
{
    const std::array ints {0, 1, 2, 3, 4};
    auto odds = ints | std::views::filter([](int i) { return 0 != i % 2; });
    auto negs = ints | std::views::filter([](int i) { return i < 0; });
    std::cout << std::boolalpha
              << "Has odd numbers: " << (!!odds) << ' ' << '\n'
              << "Has negative numbers: " << (!!negs) << ' ' << '\n';
}

Вывод:

Has odd numbers: true
Has negative numbers: false

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

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