Namespaces
Variants

std::tuple_size<std::ranges::subrange>

С сайта ru.cppreference.net
 
 
Библиотека диапазонов
Адаптеры диапазонов
 
 
Определён в заголовочном файле <ranges>
template< class I, class S, ranges::subrange_kind K >
struct tuple_size<ranges::subrange<I, S, K>>
    : std::integral_constant<std::size_t, 2> {};
(начиная с C++20)

Частичная специализация std::tuple_size для std::ranges::subrange предоставляет возможность во время компиляции получить количество компонентов subrange, которое всегда равно 2, используя синтаксис, подобный кортежу. Она предназначена для поддержки структурированных привязок.

Наследуется от std:: integral_constant

Константы-члены

value
[static]
константное значение 2
(публичная статическая константа-член)

Функции-члены

operator std::size_t
преобразует объект в std:: size_t , возвращает value
(публичная функция-член)
operator()
(C++14)
возвращает value
(публичная функция-член)

Типы-члены

Тип Определение
value_type std:: size_t
type std:: integral_constant < std:: size_t , value >

Пример

#include <array>
#include <iostream>
#include <iterator>
#include <ranges>
int main()
{
    static_assert(2 == std::tuple_size_v<std::ranges::subrange<int*, int*>>);
    using array5 = std::array<int, 5>;
    static_assert(2 == std::tuple_size<std::ranges::subrange<
        array5::const_iterator, array5::const_iterator>>{});
    constexpr array5 a{1, 2, 3, 4, 5};
    std::ranges::subrange sub_a1{a};
    for (std::cout << "sub_a1: { "; int e : sub_a1)
        std::cout << e << ' ';
    std::cout << "}\n";
    std::ranges::subrange sub_a2{std::next(cbegin(a)), std::prev(cend(a))};
    const auto [first, last] = sub_a2;
    std::cout << "sub_a2 size = " << std::distance(first, last) << '\n';
    for (std::cout << "sub_a2: { "; int e : sub_a2)
        std::cout << e << ' ';
    std::cout << "}\n";
}

Вывод:

sub_a1: { 1 2 3 4 5 }
sub_a2 size = 3
sub_a2: { 2 3 4 }

Смотрите также

Structured binding (C++17) связывает указанные имена с подобъектами или элементами кортежа инициализатора
(C++11)
получает количество элементов типа, подобного кортежу
(шаблон класса)
получает размер

tuple
(специализация шаблона класса)

получает размер pair
(специализация шаблона класса)
получает размер array
(специализация шаблона класса)
получает тип итератора или сторожа std::ranges::subrange
(специализация шаблона класса)