FreeBSD Manual Pages
std::ranges...face::empty(3) C++ Standard Libary std::ranges...face::empty(3) NAME std::ranges::view_interface::empty - std::ranges::view_interface::empty Synopsis constexpr bool empty() (1) (since C++20) requires ranges::sized_range<D> || ranges::forward_range<D>; constexpr bool empty() const requires ranges::sized_range<const D> || (2) (since C++20) ranges::forward_range<const D>; 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). Parameters (none) Return value true if the size of the object of the derived type is 0 (if D satis- fies std::ranges::sized_range), or its beginning iterator and the sen- tinel compare equal, false otherwise. Notes Following derived types may use the default implementation of empty: * std::ranges::common_view * std::ranges::drop_view * std::ranges::drop_while_view * std::ranges::elements_view * std::ranges::filter_view * std::ranges::join_view * std::ranges::lazy_split_view * std::ranges::reverse_view * std::ranges::single_view * std::ranges::split_view * std::ranges::take_view * std::ranges::take_while_view * std::ranges::transform_view * std::ranges::adjacent_transform_view * std::ranges::adjacent_view * std::ranges::as_const_view * std::ranges::as_rvalue_view * std::ranges::cartesian_product_view * std::ranges::chunk_view * std::ranges::chunk_by_view (since C++23) * std::ranges::join_with_view * std::ranges::repeat_view * std::ranges::slide_view * std::ranges::stride_view * std::ranges::zip_view * std::ranges::zip_transform_view 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. Example // Run this code #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()); } Defect reports The following behavior-changing defect reports were applied retroac- tively to previously published C++ standards. DR Applied to Behavior as published Correct behavior LWG 3715 C++20 empty() only supported sized_range- only types are also forward_range types supported See also empty checks whether the container is empty (C++17) (function template) ranges::empty checks whether a range is empty (C++20) (customization point object) http://cppreference.com 2024.06.10 std::ranges...face::empty(3)
NAME | Synopsis | Parameters | Return value | Notes | Example | See also
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::ranges::view_interface::empty&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>
