On 1 March 2013 06:21, NightStrike wrote: > This code compiles with clang/libc++, but doesn't with gcc4.8/libstdc++: > > #include <functional> > #include <future> > #include <iostream> > #include <memory> > #include <ostream> > > struct S > { > void f() > { > std::cerr << "Meep meep\n"; > } > }; > > int main() > { > std::unique_ptr<S> sp(new S); > std::packaged_task<void ()> pt(std::bind(&S::f, std::move(sp))); > pt(); > std::cerr << "sp is empty: " << std::boolalpha << !sp << std::endl; > } > > > > Is that a bug in gcc? The problem is that I implemented packaged_task using a std::function to hold the stored task, and std::function requires a CopyConstructible target object, but your function object is only MoveConstructible. This is a GCC bug, I think I can see an easy way to fix it, but it will have to wait for 4.8.1 because it's not a regression.