gcc7.2.0 packaged_task sources, :
packaged_task(allocator_arg_t, const _Alloc &__a, _Fn &&__fn)
: _M_state(__create_task_state<_Res(_ArgTypes...)>(std::forward<_Fn>(__fn), __a)){}
~packaged_task()
{
if (static_cast<bool>(_M_state) && !_M_state.unique())
_M_state->_M_break_promise(std::move(_M_state->_M_result));
}
_M_state
shared_ptr packaged_task. , , gcc packaged_task, , , , _, , shared_future.
, clang , ( clang ).
? ; ,
[[futures.task]]
packaged_task , .
packaged_task (F && f) [...] packaged_task std:: forward (f).
packaged_task (packaged_task & rhs) [...] rhs *.
reset() [...] : * this = packaged_task (std:: move (f)), f - , * .
, _,
[[futures.state]]
- , , . (, ) , (, ) . [. , promises , , . -endnote]
- [: , , , async [...]]
[futures.task.members]
-packaged_task (F && f); [...] f , f [...] - ~ packaged_task(); :
, (, ; , , , , ); , dtor.
, , clang , gcc-. , , , ...