Namespaces
Variants
Actions

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

From cppreference.com
 
 
Ranges library
Range adaptors
 
 
constexprexplicit operator bool() requires /* see below */;
(1) (since C++20)
constexprexplicit operator bool()const requires /* see below */;
(2) (since C++20)

The default implementation of operator bool member function checks whether the view is non-empty. It makes the derived type contextually convertible to bool.

1) Let derived be static_cast<D&>(*this). The expression in the requires-clause is equal to requires {ranges::empty(derived);}, and the function body is equivalent to return!ranges::empty(derived);.
2) Same as (1), except that derived is static_cast<const D&>(*this).

Contents

[edit]Return value

false if the value of the derived type is empty (determined by std::ranges::empty), true otherwise.

[edit]Notes

In C++20, no type derived from std::ranges::view_interface in the standard library provides their own operator bool. Almost all of these types use the default implementation.

A notable exception is std::ranges::basic_istream_view. For its iterator type never satisfies forward_iterator, the view cannot use the inherited operator bool.

[edit]Example

#include <array>#include <iostream>#include <ranges>   int main(){conststd::array ints {0, 1, 2, 3, 4};auto odds = ints | std::views::filter([](int i){return0!= 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';}

Output:

Has odd numbers: true Has negative numbers: false

[edit]See also

checks whether a range is empty
(customization point object)[edit]
returns whether the derived view is empty, provided only if it satisfies sized_range or forward_range
(public member function)[edit]
(C++17)
checks whether the container is empty
(function template)[edit]
close