Namespaces
Variants

guides de déduction pour std::function

Depuis fr.cppreference.net
 
 
Bibliothèque d'utilitaires
Support linguistique
Support de type (types de base, RTTI)
Macros de test de fonctionnalités de la bibliothèque (C++20)
Utilitaires de programme
Fonctions variadiques
Support des coroutines (C++20)
Support des contrats (C++26)
Comparaison à trois voies
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilitaires généraux
Opérateurs relationnels (obsolète en C++20)
 
Objets fonction
Invocation de fonctions
(C++17)(C++23)
Objet fonction identité
(C++20)
Enveloppes d'opérateurs 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)

Anciens binders et adaptateurs
(jusqu'à C++17*)
(jusqu'à C++17*)
(jusqu'à C++17*)
(jusqu'à C++17*)
(jusqu'à C++17*)  
(jusqu'à C++17*)
(jusqu'à C++17*)(jusqu'à C++17*)(jusqu'à C++17*)(jusqu'à C++17*)
(jusqu'à C++20*)
(jusqu'à C++20*)
(jusqu'à C++17*)(jusqu'à C++17*)
(jusqu'à C++17*)(jusqu'à C++17*)

(jusqu'à C++17*)
(jusqu'à C++17*)(jusqu'à C++17*)(jusqu'à C++17*)(jusqu'à C++17*)
(jusqu'à C++20*)
(jusqu'à 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</*see below*/>;
(2) (depuis C++17)
template< class F >
function( F ) -> function</*see below*/>;
(3) (depuis C++23)
template< class F >
function( F ) -> function</*see below*/>;
(4) (depuis C++23)
1) Ce guide de déduction est fourni pour std::function afin de permettre la déduction à partir de fonctions.
2) Cette surcharge participe à la résolution de surcharge seulement 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é référence lvalue). Le type déduit est std::function<R(A...)>.
3) Cette surcharge participe à la résolution de surcharge seulement si &F::operator() est bien formé lorsqu'il est traité comme un opérande non évalué et que F::operator() est une fonction avec 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 seulement si &F::operator() est bien formé lorsqu'il est traité comme un opérande non évalué et que 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