Namespaces
Variants

std::ranges::common_range

С ru.cppreference.net
 
 
Библиотека диапазонов
Адаптеры диапазонов
 
Определен в заголовке <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
(шаблон класса) (объект адаптера диапазона)