Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
Определено в заголовочном файле <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
(специализация шаблона класса)