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/cpp/ranges/subrange/tuple_element