std:: indirectly_readable_traits
|
Definido en el encabezado
<iterator>
|
||
|
template
<
class
I
>
struct indirectly_readable_traits { } ; |
(1) | (desde C++20) |
|
template
<
class
T
>
struct
indirectly_readable_traits
<
T
*
>
:
|
(2) | (desde C++20) |
|
template
<
class
I
>
requiere
std::
is_array_v
<
I
>
|
(3) | (desde C++20) |
|
template
<
class
T
>
struct
indirectly_readable_traits
<
const
T
>
:
|
(4) | (desde C++20) |
|
template
<
/* has-member-value-type */
T
>
struct
indirectly_readable_traits
<
T
>
:
|
(5) | (desde C++20) |
|
template
<
/* has-member-element-type */
T
>
struct
indirectly_readable_traits
<
T
>
:
|
(6) | (desde C++20) |
|
template
<
/* has-member-value-type */
T
>
requires
/* has-member-element-type */
<
T
>
|
(7) | (desde C++20) |
|
template
<
/* has-member-value-type */
T
>
requires
/* has-member-element-type */
<
T
>
&&
|
(8) | (desde C++20) |
|
Clases auxiliares y conceptos
|
||
|
template
<
class
>
struct /* cond-value-type */ { } ; |
(1) | ( solo para exposición* ) |
|
template
<
class
T
>
requires
std::
is_object_v
<
T
>
|
(2) | ( solo para exposición* ) |
|
template
<
class
T
>
concept
/* tiene-tipo-valor-miembro */
=
|
(3) | ( solo para exposición* ) |
|
template
<
class
T
>
concepto
/* has-member-element-type */
=
|
(4) | ( solo para exposición* ) |
Calcula el tipo de valor asociado del argumento de plantilla. Si el tipo de valor asociado existe, se representa mediante el tipo anidado
value_type
, de lo contrario
value_type
no está definido. Un programa puede especializar
indirectly_readable_traits
para un
tipo definido por el programa
.
Contenidos |
Explicación
Las especializaciones anteriores pueden describirse informalmente de la siguiente manera.
Dado un tipo
T
, su tipo de valor asociado
V
se determina de la siguiente manera:
-
Si
Testá calificado con const,Ves el tipo de valor asociado deTsin calificación const. -
De lo contrario, si
Tes un tipo array,Ves el tipo de elemento del array sin calificación cv. -
De lo contrario, primero se determina un tipo de valor condicional
C:
-
-
Si
Tes un tipo puntero,Ces el tipo apuntado. -
En caso contrario, si
Ttiene tipos anidadosvalue_typeyelement_type:
-
-
Si estos tipos son iguales (sin considerar calificadores cv),
Cestypename T::value_type. -
En caso contrario,
Cno está definido.
-
Si estos tipos son iguales (sin considerar calificadores cv),
-
En caso contrario, si
Ttiene el tipo anidadovalue_typepero noelement_type,Cestypename T::value_type. -
En caso contrario, si
Ttiene el tipo anidadoelement_typepero novalue_type,Cestypename T::element_type. -
En caso contrario,
Cno está definido.
-
Si
-
Entonces
Vse determina a partir deCcomo sigue:-
Si
Cno está definido, oCno es un tipo objeto ,Vno está definido. -
En caso contrario,
VesCsin calificadores cv.
-
Si
Notas
value_type
está destinado para su uso con tipos
indirectly_readable
como los iteradores. No está destinado para su uso con rangos.
Ejemplo
|
Esta sección está incompleta
Motivo: sin ejemplo |
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 3446 | C++20 |
las especializaciones
(5,6)
eran ambiguas para tipos que tienen
tanto
value_type
como
element_type
como tipos anidados
|
se añadió la especialización (8) |
| LWG 3541 | C++20 |
LWG 3446 introdujo un error grave para casos ambiguos
donde
value_type
y
element_type
son diferentes
|
se añadió la especialización (7) |
Véase también
|
(C++20)
|
especifica que un tipo es indirectamente legible aplicando el operador
*
(concept) |
|
(C++20)
(C++20)
(C++23)
(C++20)
(C++20)
(C++20)
|
calcula los tipos asociados de un iterador
(alias template) |
|
proporciona una interfaz uniforme para las propiedades de un iterador
(class template) |