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* )
Défini dans l'en-tête <functional>
template < class R, class ... ArgTypes >
function ( R ( * ) ( ArgTypes... ) ) - > function < R ( ArgTypes... ) > ;
(1) (depuis C++17)
template < class F >
function ( F ) - > function < /*voir ci-dessous*/ > ;
(2) (depuis C++17)
template < class F >
function ( F ) - > function < /*voir ci-dessous*/ > ;
(3) (depuis C++23)
template < class F >
function ( F ) - > function < /*voir ci-dessous*/ > ;
(4) (depuis C++23)
1) Ce guide de déduction est fourni pour std::function afin de permettre la déduction à partir des fonctions.
2) Cette surcharge participe à la résolution de surcharge uniquement si & F :: operator ( ) est bien formé lorsqu'il est traité comme un opérande non évalué et que decltype ( & F :: operator ( ) ) est de la forme R ( G :: * ) ( A... ) (éventuellement qualifié cv, éventuellement noexcept, éventuellement qualifié par une référence lvalue). Le type déduit est std:: function < R ( A... ) > .
3) Cette surcharge participe à la résolution de surcharge uniquement si & F :: operator ( ) est bien formé lorsqu'il est traité comme un opérande non évalué et F :: operator ( ) est une fonction à paramètre objet explicite dont le type est de la forme R ( G, A... ) ou R ( G, A... ) noexcept . Le type déduit est std:: function < R ( A... ) > .
4) Cette surcharge participe à la résolution de surcharge uniquement si & F :: operator ( ) est bien formé lorsqu'il est traité comme un opérande non évalué et F :: operator ( ) est une fonction membre statique dont le type est de la forme R ( A... ) ou R ( A... ) noexcept . Le type déduit est std:: function < R ( A... ) > .

Notes

Ces guides de déduction ne permettent pas la déduction à partir d'une fonction avec un paramètre ellipsis , et le ... dans les types est toujours traité comme une expansion de pack .

Le type déduit par ces guides de déduction peut changer dans une révision ultérieure de la norme (en particulier, cela pourrait se produire si la prise en charge de noexcept est ajoutée à std::function dans une norme ultérieure).

Exemple

#include <functional>
int func(double) { return 0; }
int main() {
  std::function f{func}; // guide #1 déduit function<int(double)>
  int i = 5;
  std::function g = [&](double) { return i; }; // guide #2 déduit function<int(double)>
}

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 3238 C++17 le comportement de (2) était ambigu lorsque
F :: operator ( ) est qualifié par &&
clarifié comme étant exclu de la résolution de surcharge