◐ Shell
clean mode source ↗

std::common_with - cppreference.com

De cppreference.com

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