Guías de deducción para std::function
De cppreference.com
< cpp | utility | functional | function
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
Ejecuta este código
#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ó. |