Namespaces
Variants

std::ranges::view_interface<D>:: operator bool

From cppreference.net
Ranges library
Range adaptors
constexpr explicit operator bool ( ) requires /* 下記参照 */ ;
(1) (C++20以降)
constexpr explicit operator bool ( ) const requires /* 下記参照 */ ;
(2) (C++20以降)

operator bool メンバ関数のデフォルト実装は、ビューが空でないかどうかをチェックします。これにより、派生型は 文脈的に bool へ変換可能 になります。

1) derived static_cast < D & > ( * this ) と定義する。requires節内の式は requires { ranges:: empty ( derived ) ; } と等価であり、関数本体は return ! ranges:: empty ( derived ) ; と等価である。
2) (1) と同様だが、 derived static_cast < const D & > ( * this ) である点が異なる。

目次

戻り値

false 派生型の値が空の場合( std::ranges::empty によって判定)、 true それ以外の場合。

注記

C++20では、標準ライブラリ内の std::ranges::view_interface から派生した型は、独自の operator bool を提供しません。これらの型のほとんど全てがデフォルト実装を使用しています。

注目すべき例外は std::ranges::basic_istream_view です。そのイテレータ型は決して forward_iterator を満たさないため、このビューは継承された operator bool を使用できません。

#include <array>
#include <iostream>
#include <ranges>
int main()
{
    const std::array ints {0, 1, 2, 3, 4};
    auto odds = ints | std::views::filter([](int i) { return 0 != 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';
}

出力:

Has odd numbers: true
Has negative numbers: false

関連項目

範囲が空かどうかをチェックする
(カスタマイゼーションポイントオブジェクト)
派生ビューが空かどうかを返す( sized_range または forward_range を満たす場合のみ提供)
(公開メンバ関数)
(C++17)
コンテナが空かどうかをチェックする
(関数テンプレート)