Namespaces
Variants

std::tuple_element<std::ranges::subrange>

С сайта ru.cppreference.net
 
 
Библиотека диапазонов
Адаптеры диапазонов
 
 
Определён в заголовке <ranges>
template< class I, class S, ranges::subrange_kind K >
struct tuple_element<0, ranges::subrange<I, S, K>>;
(1) (начиная с C++20)
template< class I, class S, ranges::subrange_kind K >
struct tuple_element<0, const ranges::subrange<I, S, K>>;
(2) (начиная с C++20)
template< class I, class S, ranges::subrange_kind K >
struct tuple_element<1, ranges::subrange<I, S, K>>;
(3) (начиная с C++20)
template< class I, class S, ranges::subrange_kind K >
struct tuple_element<1, const ranges::subrange<I, S, K>>;
(4) (начиная с C++20)

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

1,2) Получает тип итератора, то есть I.
3,4) Получает тип дозорного, то есть S.

Типы членов

Тип члена Определение
type (1,2) I
(3,4) S

Примечания

Поскольку get функции для subrange возвращают итераторы и стражей по значению, const квалификатор не добавляется к типам результата, когда subrange является const-квалифицированным (но не volatile-квалифицированным).

Если subrange квалифицирован как volatile, результирующие типы также квалифицируются как volatile, поскольку используются частичные специализации для volatile или const volatile типов. Такое использование устарело.

Пример

#include <iterator>
#include <list>
#include <ranges>
#include <type_traits>
int main()
{
    std::list<int> list{3, 1, 4, 1, 5, 9, 2, 6};
    std::ranges::subrange subrange
    {
        std::counted_iterator{std::begin(list), 4},
        std::default_sentinel
    };
    static_assert(
        std::is_same_v<
            std::tuple_element_t<0, decltype(subrange)>,
            // implementation-defined type:
            std::counted_iterator<std::_List_iterator<int>>
            >);
    static_assert(
        std::is_same_v<
            std::tuple_element_t<1, decltype(subrange)>,
            std::default_sentinel_t
            >);
}

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

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