std::experimental::ranges:: ConvertibleTo
|
Definido en el encabezado
<experimental/ranges/concepts>
|
||
|
template
<
class
From,
class
To
>
concept
bool
ConvertibleTo
=
|
(ranges TS) | |
El concepto
ConvertibleTo
<
From, To
>
especifica que una expresión del tipo y categoría de valor especificados por
From
puede convertirse implícita y explícitamente al tipo
To
, y las dos formas de conversión son equivalentes.
Específicamente,
ConvertibleTo
<
From, To
>
se satisface solo si, dada la función inventada
To test
(
From
(
&
f
)
(
)
)
{
return
f
(
)
;
}
y una función
f
de tipo
From
(
)
tal que la expresión
f
(
)
es que preserva la igualdad (ver abajo),
-
O bien
-
Tono es un tipo objeto ni un tipo referencia-a-objeto, o -
static_cast
<
To
>
(
f
(
)
)
es igual a
test(f), y
-
-
Una de las siguientes afirmaciones es verdadera:
-
Fromno es un tipo referencia-a-objeto, o -
Fromes una referencia a valor derecho a un tipo no calificado-const, y el estado resultante del objeto referenciado por f ( ) es válido pero no especificado después de cualquiera de las expresiones anteriores; o -
el objeto referido por
f()no es modificado por ninguna de las expresiones anteriores.
-
No es necesario que exista ninguna relación de subsunción entre ConvertibleTo < From, To > y std:: is_convertible < From, To > :: value .
Preservación de la igualdad
Una expresión es equality preserving si produce salidas iguales dadas entradas iguales.
- Las entradas de una expresión consisten en sus operandos.
- Las salidas de una expresión consisten en su resultado y todos los operandos modificados por la expresión (si los hay).
Toda expresión que deba preservar la igualdad debe además ser estable : dos evaluaciones de dicha expresión con los mismos objetos de entrada deben producir salidas iguales, a menos que exista una modificación explícita e intermedia de esos objetos de entrada.
A menos que se indique lo contrario, toda expresión utilizada en una requires-expression debe ser de preservación de igualdad y estable, y la evaluación de la expresión solo puede modificar sus operandos no constantes. Los operandos que son constantes no deben modificarse.
Véase también
|
(C++11)
(C++20)
|
verifica si un tipo puede convertirse a otro tipo
(plantilla de clase) |