std::convertible_to
| Definido en el archivo de encabezado <concepts>
|
||
template <typename From, typename To>
concept convertible_to =
std::is_convertible_v<From, To> &&
requires(From (&f)()) {
static_cast<To>(f());
};
|
(desde C++20) | |
El concepto convertible_to<From, To> especifica que una expresión de tipo y categoría de valor especificado por From puede ser convertido implícitamente y explícitamente al tipo To, y las dos formas de conversión son equivalentes.
Requerimientos semánticos
convertible_to<From, To> se modela solamente si, dada una función fun de tipo From () tal que la expresión fun() conserva la igualdad (véase más abajo),
- Bien
Tono es un tipo de objeto ni un tipo de referencia a objeto, ostatic_cast<To>(fun())es igual a[]() -> To { return fun(); }(), y
- Uno de los siguientes es verdadero:
Fromno es un tipo referencia a objeto, oFromes una referencia rvalue a un tipo no calificado const, y el estado resultante del objeto referenciado porfun()es válido pero no especificado después de cualquiera de las expresiones detalladas previamente; o- el objeto al que se refiere
fun()no se modificó por ninguna de las expresiones detalladas previamente.
Conservación de la igualdad
Una expresión es conservadora de igualdad si resulta en 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 es que los hay).
Cada expresión que se requiere sea conservadora de igualdad, se requiere además que sea estable: dos evaluaciones de tal expresión con los mismos objetos de entrada debe tener salidas iguales si no se encuentra alguna modificación interventora de esos objetos de entrada.
A menos que se indique de otra manera, cada expresión utilizada en una expresión-requiere se requiere sea conservadora de igualdad y estable, y la evaluación de la expresión puede solamente modificar sus operandos no constantes. Los operandos que son constantes no deben ser modificados.
Véase también
(C++11)(C++20) |
Comprueba si un tipo puede convertirse a otro tipo. (plantilla de clase) |