std::common_with
Definido en el archivo de encabezado <concepts> | ||
template<class T, class U> concept common_with = | (desde C++20) | |
El concepto common_with<T, U>
especifica que dos tipos T
and U
comparten un tipo común (computado por std::common_type_t) al cual ambos pueden ser convertidos.
T y U modelan common_with<T, U>
solamente si, dadas las expresiones conservadoras de igualdad t1
, t2
, u1
y u2
tales que decltype((t1)) y decltype((t2)) son ambas T
y decltype((u1)) y decltype((u2)) son ambas U
,
- std::common_type_t<T, U>(t1) es igual a std::common_type_t<T, U>(t2) si y solo si
t1
es igual at2
; y - std::common_type_t<T, U>(u1) es igual a std::common_type_t<T, U>(u2) si y solo si
u1
es igual au2
.
En otras palabras, la conversión al tipo común debe conservar la igualdad.
[editar]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.
[editar] Véase también
(C++11) | Deduce el tipo del resultado de una expresión aritmética mixta (plantilla de clase) |
Determina el tipo común de referencia de un grupo de tipos (plantilla de clase) | |
(C++20) | Especifica que dos tipos comparte un tipo de referencia común. (concepto) |