This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++11 status.
Section: 33.10.10 [futures.task] Status: C++11 Submitter: Anthony Williams Opened: 2010-11-12 Last modified: 2016-01-28
Priority: Not Prioritized
View all other issues in [futures.task].
View all issues with C++11 status.
Discussion:
packaged_task::operator() always returns void, regardless of the return type of the wrapped task. However, packaged_task::result_type is a typedef to the return type of the wrapped task. This is inconsistent with other uses of result_type in the standard, where it matches the return type of operator() (e.g. function, owner_less). This is confusing.
It also violates the TR1 result_of protocol, and thus makes packaged_task harder to use with anything that respects that protocol.
Finally, it is of little use anyway.
packaged_task::result_type should therefore be removed.
[2011-02-24 Reflector discussion]
Moved to Tentatively Ready after 5 votes.
Proposed resolution:
Alter the class definition of packaged_task in 33.10.10 [futures.task] p. 2 as follows:
template<class R, class... ArgTypes> class packaged_task<R(ArgTypes...)> { public:typedef R result_type;[...] };