Namespaces
Variants

std::experimental::ranges:: ConvertibleTo

From cppreference.net
Definido en el encabezado <experimental/ranges/concepts>
template < class From, class To >

concept bool ConvertibleTo =
std:: is_convertible < From, To > :: value &&
requires ( From ( & f ) ( ) ) {
static_cast < To > ( f ( ) ) ;

} ;
(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
    • To no 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:
    • From no es un tipo referencia-a-objeto, o
    • From es 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

verifica si un tipo puede convertirse a otro tipo
(plantilla de clase)