guides de déduction pour std::function
| 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) |
&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...)>.&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...)>.&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 |