Namespaces
Variants

std::ranges::common_range

ja.cppreference.net から
 
 
Rangesライブラリ
範囲アダプタ
 
ヘッダ <ranges>
template< class T >
concept common_range =
    ranges::range<T> && std::same_as<ranges::iterator_t<T>, ranges::sentinel_t<T>>;
で定義 (C++20から)

この common_range コンセプトは、 range の改良であり、 std::ranges::begin() と std::ranges::end() が同じ型を返すものです(例:すべての標準ライブラリコンテナ)。

例

#include <ranges>
struct A
{
    char* begin();
    char* end();
};
static_assert( std::ranges::common_range<A> );
struct B
{
    char* begin();
    bool end();
};  // common_rangeではない: begin/endが異なる型を持つ
static_assert( not std::ranges::common_range<B> );
struct C
{
    char* begin();
};  // common_rangeではない、rangeですらない: end()を持たない
static_assert( not std::ranges::common_range<C> );
int main() {}

関連項目

view を common_range に変換する
(クラステンプレート) (レンジアダプタオブジェクト)