Espacios de nombres
Variantes

std::convertible_to

De cppreference.com
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
    • To no es un tipo de objeto ni un tipo de referencia a objeto, o
    • static_cast<To>(fun()) es igual a []() -> To { return fun(); }(), y
  • Uno de los siguientes es verdadero:
    • From no es un tipo referencia a objeto, o
    • From es una referencia rvalue a un tipo no calificado const, y el estado resultante del objeto referenciado por fun() 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

Comprueba si un tipo puede convertirse a otro tipo.
(plantilla de clase) [editar]