http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56492
Bug #: 56492
Summary: std::packaged_task requires CopyConstructible stored
task
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Keywords: rejects-valid
Severity: normal
Priority: P3
Component: libstdc++
AssignedTo: [email protected]
ReportedBy: [email protected]
This is rejected because std::packaged_task uses std::function internally and
std::function requires a CopyConstructible target object:
#include <future>
struct S
{
S() = default;
S(S&&) = default;
void operator()() { }
};
std::packaged_task<void ()> pt{ S{} };
It's not necessary to use std::function, the _Task_state type could hold the
stored task directly, which would allow it to be move constructed.