Namespaces
Variants

Guías de deducción para std::function

De es.cppreference.net
 
 
Biblioteca de utilidades
Soporte del lenguaje
Soporte de tipos (tipos básicos, RTTI)
Macros de prueba de características de la biblioteca (C++20)
Utilidades del programa
Funciones variádicas
Soporte de corrutinas (C++20)
Soporte de contratos (C++26)
Comparación de tres vías
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilidades generales
Operadores relacionales (obsoleto en C++20)
 
Objetos función
Invocación de funciones
(C++17)(C++23)
Objeto función identidad
(C++20)
Envoltorios de operadores transparentes
(C++14)
(C++14)
(C++14)
(C++14)  
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)

Binders y adaptadores antiguos
(hasta C++17*)
(hasta C++17*)
(hasta C++17*)
(hasta C++17*)  
(hasta C++17*)
(hasta C++17*)(hasta C++17*)(hasta C++17*)(hasta C++17*)
(hasta C++20*)
(hasta C++20*)
(hasta C++17*)(hasta C++17*)
(hasta C++17*)(hasta C++17*)

(hasta C++17*)
(hasta C++17*)(hasta C++17*)(hasta C++17*)(hasta C++17*)
(hasta C++20*)
(hasta C++20*)
 
 
Definido en el encabezado <functional>
template< class R, class... ArgTypes >
function( R(*)(ArgTypes...) ) -> function<R(ArgTypes...)>;
(1) (desde C++17)
template< class F >
function( F ) -> function</*see below*/>;
(2) (desde C++17)
template< class F >
function( F ) -> function</*see below*/>;
(3) (desde C++23)
template< class F >
function( F ) -> function</*see below*/>;
(4) (desde C++23)
1) Esta guía de deducción se proporciona para std::function para permitir la deducción a partir de funciones.
2) Esta sobrecarga participa en la resolución de sobrecargas solo si &F::operator() está bien formado cuando se trata como un operando no evaluado y decltype(&F::operator()) tiene la forma R(G::*)(A...) (opcionalmente cv-calificado, opcionalmente noexcept, opcionalmente calificado como referencia lvalue). El tipo deducido es std::function<R(A...)>.
3) Esta sobrecarga participa en la resolución de sobrecargas solo si &F::operator() está bien formado cuando se trata como un operando no evaluado y F::operator() es una función con parámetro de objeto explícito cuyo tipo tiene la forma R(G, A...) o R(G, A...) noexcept. El tipo deducido es std::function<R(A...)>.
4) Esta sobrecarga participa en la resolución de sobrecargas solo si &F::operator() está bien formado cuando se trata como un operando no evaluado y F::operator() es una función miembro estática cuyo tipo tiene la forma R(A...) o R(A...) noexcept. El tipo deducido es std::function<R(A...)>.

Notas

Estas guías de deducción no permiten la deducción desde una función con parámetro de elipsis , y el ... en los tipos siempre se trata como una expansión de paquete .

El tipo deducido por estas guías de deducción puede cambiar en una revisión posterior del estándar (en particular, esto podría suceder si noexcept se añade soporte para std::function en un estándar posterior).

Ejemplo

#include <functional>
int func(double) { return 0; }
int main() {
  std::function f{func}; // guía #1 deduce function<int(double)>
  int i = 5;
  std::function g = [&](double) { return i; }; // guía #2 deduce function<int(double)>
}

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 3238 C++17 el comportamiento de (2) no estaba claro cuando
F :: operator ( ) está calificado con &&
se aclaró que se excluye de la resolución de sobrecarga