Namespaces
Variants

deduction guides for std::function

From cppreference.net
Utilities library
Function objects
Function invocation
(C++17) (C++23)
Identity function object
(C++20)
Old binders and adaptors
( until C++17* )
( until C++17* )
( until C++17* )
( until C++17* )
( until C++17* ) ( until C++17* ) ( until C++17* ) ( until C++17* )
( until C++20* )
( until C++20* )
( until C++17* ) ( until C++17* )
( until C++17* ) ( until C++17* )

( until C++17* )
( until C++17* ) ( until C++17* ) ( until C++17* ) ( until C++17* )
( until C++20* )
( until 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 < /*ver más abajo*/ > ;
(2) (desde C++17)
template < class F >
function ( F ) - > function < /*ver más abajo*/ > ;
(3) (desde C++23)
template < class F >
function ( F ) - > function < /*ver más abajo*/ > ;
(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 sobrecarga solo 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 calificado como referencia lvalue). El tipo deducido es std:: function < R ( A... ) > .
3) Esta sobrecarga participa en la resolución de sobrecarga solo si & F :: operator ( ) está bien formado cuando se trata como un operando no evaluado y F :: operator ( ) es una función de parámetro de objeto explícito cuyo tipo es de 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 sobrecarga 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 es de 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