Espacios de nombres
Variantes

std::common_with

De cppreference.com
<tbody> </tbody>
Definido en el archivo de encabezado <concepts>
template <class T, class U> concept common_with = std::same_as<std::common_type_t<T, U>, std::common_type_t<U, T>> && requires { static_cast<std::common_type_t<T, U>>(std::declval<T>()); static_cast<std::common_type_t<T, U>>(std::declval<U>()); } && std::common_reference_with< std::add_lvalue_reference_t<const T>, std::add_lvalue_reference_t<const U>> && std::common_reference_with< std::add_lvalue_reference_t<std::common_type_t<T, U>>, std::common_reference_t< std::add_lvalue_reference_t<const T>, std::add_lvalue_reference_t<const U>>>;
(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 a t2; 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 a u2.

En otras palabras, la conversión al tipo común 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

Deduce el tipo del resultado de una expresión aritmética mixta
(plantilla de clase) [editar]
Determina el tipo común de referencia de un grupo de tipos
(plantilla de clase) [editar]
Especifica que dos tipos comparte un tipo de referencia común.
(concepto) [editar]