Espacios de nombres
Variantes
Acciones

std::assignable_from

De cppreference.com
< cpp‎ | concepts
Definido en el archivo de encabezado <concepts>
template<typename LHS, typename RHS>

concept assignable_from =
  std::is_lvalue_reference_v<LHS> &&
  std::common_reference_with<
    const std::remove_reference_t<LHS>&,
    const std::remove_reference_t<RHS>&> &&
  requires(LHS lhs, RHS&& rhs) {
    { lhs = std::forward<RHS>(rhs) } -> std::same_as<LHS>;

  };
(desde C++20)

El concepto assignable_from<LHS, RHS> especifica que la expresión del tipo y la categoría de valor especificada por RHS puede asignarse a una expresión lvalue cuyo tipo se especifica por LHS.

Contenido

[editar] Requerimientos semánticos

Dado

  • lhs, un lvalue que se refiere a un objeto lcopy tal que decltype((lhs)) es LHS,
  • rhs, una expresión tal que decltype((rhs)) es RHS,
  • rcopy, un objeto distinto que es igual a rhs,

assignable_from<LHS, RHS> se modela solamente si

  • std::addressof(lhs = rhs) == std::addressof(lcopy) (p. ej., la expresión de asignación produce un lvalue que se refiere al primer operando);
  • Después de evaluar a lhs = rhs:
    • lhs es igual a rcopy, a menos que rhs sea un xvalue no const que se refiere a lcopy (p. ej., la asignación es una asignación de movimiento a sí mismo),
    • si rhs es un glvalue:
      • Si es un xvalue no const, el objeto al cual se refiere está en un estado válido pero no especificado;
      • De otra forma, el objeto al que se refiere no está modificado;

[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.

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.

[editar] Notas

La asignación no tiene que ser una función total. En particular, si asignar algún objeto x puede causar que algún otro objeto y se modifique, entonces es probable que x = y no esté en el dominio de =. Esto típicamente sucede si el operando derecho es propiedad directamente o indirectamente del operando izquierdo (p. ej., con los punteros inteligentes a nodos en una estructura de datos basada en nodos, o con algo como std::vector<std::any>).

[editar] Véase también

Comprueba si un tipo tiene un operador de asignación para un argumento específico
Original:
checks if a type has a assignment operator for a specific argument
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(plantilla de clase) [editar]