Namespaces
Variants

deduction guides for std::packaged_task

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
ヘッダーで定義 <future>
template < class R, class ... Args >
packaged_task ( R ( * ) ( Args... ) ) - > packaged_task < R ( Args... ) > ;
(1) (C++17以降)
template < class F >
packaged_task ( F ) - > packaged_task < /*see below*/ > ;
(2) (C++17以降)
template < class F >
packaged_task ( F ) - > packaged_task < /*see below*/ > ;
(3) (C++23以降)
template < class F >
packaged_task ( F ) - > packaged_task < /*see below*/ > ;
(4) (C++23以降)
1) この deduction guide は、 std::packaged_task が関数からの推論を可能にするために提供されています。
2) このオーバーロードは、以下の条件を満たす場合にのみオーバーロード解決に参加します: & F :: operator ( ) が未評価オペランドとして扱われた際に適切な形式であり、かつ decltype ( & F :: operator ( ) ) R ( G :: * ) ( A... ) の形式(オプションでcv修飾、オプションでnoexcept、オプションで左辺値参照修飾)である場合です。推定される型は std:: packaged_task < R ( A... ) > です。
3) このオーバーロードは、以下の条件が満たされる場合にのみオーバーロード解決に参加します: & F :: operator ( ) が未評価オペランドとして扱われた際に well-formed であり、かつ F :: operator ( ) 明示的オブジェクトパラメータ関数 であり、その型が R ( G, A... ) または R ( G, A... ) noexcept の形式である場合です。推定される型は std:: packaged_task < R ( A... ) > です。
4) このオーバーロードは、以下の条件が満たされる場合にのみオーバーロード解決に参加します: & F :: operator ( ) が未評価オペランドとして扱われた際に well-formed であり、かつ F :: operator ( ) static member function であり、その型が R ( A... ) または R ( A... ) noexcept の形式である場合です。推論される型は std:: packaged_task < R ( A... ) > です。

注記

これらの推論ガイドは、 省略記号パラメータ を持つ関数からの推論を許可せず、型内の ... は常に パック展開 として扱われます。

#include <future>
int func(double) { return 0; }
int main()
{
    std::packaged_task f{func}; // packaged_task<int(double)> を推論
    int i = 5;
    std::packaged_task g = [&](double) { return i; }; // => packaged_task<int(double)>
}