deduction guides for
std::function
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Old binders and adaptors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
(until C++17)
|
||||
| Non-member functions | ||||
|
(until C++20)
|
||||
| Helper classes | ||||
|
(until C++17)
|
||||
| Deduction guides (C++17) |
|
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) |
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 |