On 1 March 2013 10:35, Jonathan Wakely wrote: > 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. This is now http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56492