|
Range primitives | |||||||
|
Range concepts | |||||||||||||||||||
|
Range factories | |||||||||
|
Range adaptors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
Helper items | |||||||||||||||||
|
Member functions | ||||
(C++23) | ||||
(C++23) | ||||
operator bool | ||||
constexprexplicit operatorbool() requires/* see below */; | (1) | (since C++20) |
constexprexplicit operatorbool()const requires/* see below */; | (2) | (since C++20) |
The default implementation ofoperatorbool member function checks whether the view is non-empty. It makes the derived typecontextually convertible tobool.
derived
bestatic_cast<D&>(*this). The expression in the requires-clause is equal torequires{ranges::empty(derived);}, and the function body is equivalent toreturn!ranges::empty(derived);.derived
isstatic_cast<const D&>(*this).Contents |
false if the value of the derived type is empty (determined bystd::ranges::empty),true otherwise.
In C++20, no type derived fromstd::ranges::view_interface in the standard library provides their ownoperatorbool. Almost all of these types use the default implementation.
A notable exception isstd::ranges::basic_istream_view. For its iterator type never satisfiesforward_iterator
, the view cannot use the inheritedoperatorbool.
#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: trueHas negative numbers: false
(C++20) | checks whether a range is empty (customization point object)[edit] |
returns whether the derived view is empty, provided only if it satisfiessized_range orforward_range (public member function)[edit] | |
(C++17) | checks whether the container is empty (function template)[edit] |