Namespaces
Variants

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

ja.cppreference.net より
 
 
範囲ライブラリ
範囲アダプタ
 
 
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) に束縛された参照とする。return ranges::size(derived) == 0; と等価。ただし D が sized_range を満たす場合。そうでなければ 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)
コンテナが空かどうかをチェックする
(関数テンプレート)
範囲が空かどうかをチェックする
(カスタマイゼーションポイントオブジェクト)