Namespaces
Variants

std:: invocable, std:: regular_invocable

From cppreference.net
Definido en el encabezado <concepts>
template < class F, class ... Args >

concept invocable =
requires ( F && f, Args && ... args ) {
std:: invoke ( std:: forward < F > ( f ) , std:: forward < Args > ( args ) ... ) ;
/* no se requiere que preserve la igualdad */

} ;
(desde C++20)
template < class F, class ... Args >
concept regular_invocable = std :: invocable < F, Args... > ;
(desde C++20)

El concepto invocable especifica que un tipo invocable F puede ser llamado con un conjunto de argumentos Args... utilizando la plantilla de función std::invoke .

El concepto regular_invocable añade al concepto invocable al requerir que la expresión invoke sea que preserva la igualdad y no modifique ni el objeto función ni los argumentos.

Contenidos

Preservación de la igualdad

Las expresiones declaradas en las requires expressions de los conceptos de la biblioteca estándar deben ser equality-preserving (excepto cuando se indique lo contrario).

Notas

La distinción entre invocable y regular_invocable es puramente semántica.

Un generador de números aleatorios puede satisfacer invocable pero no puede satisfacer regular_invocable ( excluyendo los cómicos ).

Referencias

  • Estándar C++23 (ISO/IEC 14882:2024):
  • 18.7.2 Concepto invocable [concept.invocable]
  • 18.7.3 Concepto regular_invocable [concept.regularinvocable]
  • Estándar C++20 (ISO/IEC 14882:2020):
  • 18.7.2 Concepto invocable [concept.invocable]
  • 18.7.3 Concepto regular_invocable [concept.regularinvocable]

Véase también

verifica si un tipo puede ser invocado (como si fuera mediante std::invoke ) con los tipos de argumentos dados
(plantilla de clase)

Enlaces externos

Un ejemplo humorístico de un generador de números aleatorios que satisface tanto invocable como regular_invocable .