std::tuple_element<std::ranges::subrange>
Определено в заголовке <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, используя синтаксис, похожий на кортежи. Они предоставляются для поддержки структурированных связываний.
I.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
>);
}См. также
| Структурированное связывание (C++17) | связывает указанные имена с подобъектами или элементами кортежа инициализатора |
|
(C++11) | получает типы элементов типа, похожего на кортеж (шаблон класса) |
|
(C++20) | получает количество компонентов std::ranges::subrange (специализация шаблона класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/ranges/subrange/tuple_element