std::tuple_element<std::ranges::subrange> - cppreference.com
De cppreference.com
| Definido en el archivo de encabezado |
||
|
|
(1) | (desde C++20) |
|
|
(2) | (desde C++20) |
|
|
(3) | (desde C++20) |
|
|
(4) | (desde C++20) |
Las especializaciones parciales de std::tuple_element para std::ranges::subrange proporcionan acceso en tiempo de compilación al tipo iterador o tipo centinela de un subrange, usando una sintaxis similar a una tupla. Se proporcionan para apoyo de vínculos estructurados.
1-2) Obtiene el tipo iterador, es decir, I.
3-4) Obtiene el tipo dentinela, es decir, S.
Tipos miembro
| Tipo miembro | Definición |
type
|
(1-2) I(3-4) S
|
Notas
Como las funciones get para subrange devuelven iteradores y centinelas por valor, no se añade un calificador const a los tipos resultado cuando el subrange está calificado const (pero no calificado volatile).
Si el subrange está calificado volatile, los tipos resultado también están calificados volatile porque se utiliza la especialización parcial para tipos volatile o const volatile. Tal uso está obsoleto.
Ejemplo
#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)>, // tipos definidos por la implementación: std::counted_iterator<std::_List_iterator<int>> >); static_assert( std::is_same_v< std::tuple_element_t<1, decltype(subrange)>, std::default_sentinel_t >); }