Namespaces
Variants

std::ranges::view_interface<D>:: empty

From cppreference.net
Ranges library
Range adaptors
constexpr bool empty ( )
requires ranges:: sized_range < D > || ranges:: forward_range < D > ;
(1) (C++20以降)
constexpr bool empty ( ) const
requires ranges:: sized_range < const D > || ranges:: forward_range < const D > ;
(2) (C++20以降)

empty() メンバー関数のデフォルト実装は、派生型のオブジェクトのサイズが 0 であるか(有効な場合)、または開始イテレータとセンチネルが等しいかどうかをチェックします。

1) derived static_cast < D & > ( * this ) に束縛された参照とする。 D sized_range を満たす場合、 return ranges:: size ( derived ) == 0 ; と等価である。それ以外の場合、 return ranges:: begin ( derived ) == ranges:: end ( derived ) ; と等価である。
2) (1) と同様ですが、 derived static_cast < const D & > ( * this ) である点が異なります。

目次

戻り値

true 派生型のオブジェクトのサイズが 0 である場合( D std::ranges::sized_range を満たす場合)、またはその開始イテレータと番兵が等しいと比較される場合、 false それ以外の場合。

注記

以下の派生型は empty のデフォルト実装を使用する可能性があります:

(C++23以降)
(C++26以降)

std::ranges::basic_istream_view std::ranges::view_interface から継承しているが、 empty() メンバ関数を宣言していないため、デフォルト実装を使用することはできない。これは、 std::ranges::sized_range std::ranges::forward_range も決して満たさないためである。

#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());
}

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 3715 C++20 empty() forward_range 型のみをサポート sized_range のみの型もサポート

関連項目

(C++17)
コンテナが空かどうかをチェックする
(関数テンプレート)
範囲が空かどうかをチェックする
(カスタマイゼーションポイントオブジェクト)