home | help
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 itera-
     tor and the
	sentinel compare equal.

	1)  Let  derived be a reference bound to static_cast<D&>(*this). Equiva-
     lent 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 satisfies
	std::ranges::sized_range),  or	its  beginning iterator and the sentinel
     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 de-
     fault
	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  be-
     havior
	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)

home | help