Espacios de nombres
Variantes
Acciones

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

De cppreference.com
< cpp‎ | utility‎ | functional‎ | function
 
 
Biblioteca de servicios
 
Objetos función
Envoltorios de funciones
(C++11)
(C++11)
Aplicación parcial de funciones
(C++20)
(C++11)
Invocación de funciones
(C++17)(C++23)
Objeto función identidad
(C++20)
Envoltorios de referencias
(C++11)(C++11)
Envoltorios de operador 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)
Negadores
(C++17)
Buscadores
Comparadores restringidos
Vinculadores 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++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 archivo de encabezado <functional>
template< class R, class... ArgTypes >
function( R(*)(ArgTypes...) ) -> function<R(ArgTypes...)>;
(1) (desde C++17)
template< class F >
function( F ) -> function</*véase a continuación*/>;
(2) (desde C++17)
1) Esta guía de deducción se proporciona para std::function para admitir la deducción a partir de funciones.
2) Esta sobrecarga solo participa en la resolución de sobrecargas si &F::operator() está bien formado cuando se trata como un operando no evaluado y decltype(&F::operator()) es de la forma R(G::*)(A...) (opcionalmente calificado-cv, opcionalmente noexcept, opcionalmente una referencia l-valor calificada) para algún tipo clase G. El tipo deducido es std::function<R(A...)>.

[editar] Notas

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

[editar] Ejemplo

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


[editar] Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 3238 C++17 El comportamiento de (2) no estaba claro. Se clarificó.