std::invocable, std::regular_invocable
Definido en el archivo de encabezado <concepts>
|
||
template< class F, class... Args > concept invocable = |
(desde C++20) | |
template< class F, class... Args > concept regular_invocable = std::invocable<F, Args...>; |
(desde C++20) | |
El concepto invocable
especifica un tipo invocable F
que puede llamarse con un conjunto de argumentos Args...
usando la plantilla de función std::invoke.
El concepto regular_invocable
añade al concepto invocable
requiriendo que la expresión invoke
conserve la igualdad y no modifique ni el objeto función ni los argumentos.
[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 distinción entre invocable
y regular_invocable
es puramente semántica.
Un generador de números aleatorios puede satisfacer a invocable
pero no puede satisfacer a regular_invocable
(excluidas las tiras cómicas).