std::common_reference_with
| Definido en el archivo de encabezado <concepts>
|
||
template <typename T, typename U> concept common_reference_with = std::same_as<std::common_reference_t<T, U>, std::common_reference_t<U, T>> && std::convertible_to<T, std::common_reference_t<T, U>> && std::convertible_to<U, std::common_reference_t<T, U>>; |
(desde C++20) | |
El concepto common_reference_with<T, U> especifica que dos tipos T y U comparten un tipo común de referencia (computado por std::common_reference_t) al que ambos pueden ser convertidos.
T y U modelan common_reference_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_reference_t<T, U>(t1)es igual astd::common_reference_t<T, U>(t2)si y solo sit1es igual at2; ystd::common_reference_t<T, U>(u1)es igual astd::common_reference_t<T, U>(u2)si y solo siu1es igual au2.
En otras palabras, la conversión al tipo común de referencia debe conservar la igualdad.
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.
Véase también
| Determina el tipo común de referencia de un grupo de tipos (plantilla de clase) | |
(C++20) |
Especifica que dos tipos comparten un tipo común. (concepto) |
(C++11) |
Deduce el tipo del resultado de una expresión aritmética mixta (plantilla de clase) |