packaged_task returning boost::any with BOOST_THREAD_VERSION>=3
Hello, I'm trying to enable boost (1.54) thread version >=3 with my code and i run into a package_task compilation issue I reduced my issue to a minimal test program that compiles fine on windows 7, but fails to compile on osx and linux (compilers info bellow) with BOOST_THREAD_VERSION = 3 or 4 (fine with boost thread version 2) test succeded on - Windows 7 with Visual 2010 Express sp1 with SDK 7.1 ok test failed on - Mac os x 10.6 Xcode 4.2 : gcc 4.2.1 and clang 3.0 - Mac os x 10.7 Xcode 4.4 : gcc and clang 4.0 - Ubuntu 13.04 gcc 4.7.4 The minimal test program : #define BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK #define BOOST_THREAD_VERSION 4 #include <boost/any.hpp> #include <boost/thread.hpp> #include <boost/function.hpp> boost::any process() { return 1; } int main() { boost::function< boost::any () > f = &process ; //boost::packaged_task< boost::any () > task(&process); // Works fine boost::packaged_task< boost::any () > task(f); return 0; } // Replacing 'boost::any' with 'int' make it compile. Error log with clang on os x 10.6 : In file included from /tmp/packaged_task_test/main.cpp:5: In file included from boost/thread.hpp:24: boost/thread/future.hpp:2298:27: error: no matching member function for call to 'set_value_at_thread_exit' this->set_value_at_thread_exit(f()); ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~ boost/thread/future.hpp:2857:33: note: in instantiation of member function 'boost::detail::task_object<boost::function<boost::any ()>, boost::any ()>::do_apply' requested here task = task_ptr(new task_object_type(f)); ^ /tmp/packaged_task_test/main.cpp:17:43: note: in instantiation of function template specialization 'boost::packaged_task<boost::any ()>::packaged_task<boost::function<boost::any ()> >' requested here boost::packaged_task< boost::any () > task(f); ^ boost/thread/future.hpp:673:18: note: candidate function not viable: no known conversion from 'result_type' (aka 'boost::any') to 'source_reference_type' (aka 'boost::any &') for 1st argument void set_value_at_thread_exit(source_reference_type result_) ^ boost/thread/future.hpp:687:18: note: candidate function not viable: no known conversion from 'result_type' (aka 'boost::any') to 'rvalue_source_type' (aka 'rv<boost::any> &') for 1st argument void set_value_at_thread_exit(rvalue_source_type result_) ^ boost/thread/future.hpp:2329:25: error: no matching member function for call to 'mark_finished_with_result' this->mark_finished_with_result(f()); ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ boost/thread/future.hpp:2857:33: note: in instantiation of member function 'boost::detail::task_object<boost::function<boost::any ()>, boost::any ()>::do_run' requested here task = task_ptr(new task_object_type(f)); ^ /tmp/packaged_task_test/main.cpp:17:43: note: in instantiation of function template specialization 'boost::packaged_task<boost::any ()>::packaged_task<boost::function<boost::any ()> >' requested here boost::packaged_task< boost::any () > task(f); ^ boost/thread/future.hpp:627:18: note: candidate function not viable: no known conversion from 'result_type' (aka 'boost::any') to 'source_reference_type' (aka 'boost::any &') for 1st argument void mark_finished_with_result(source_reference_type result_) ^ boost/thread/future.hpp:633:18: note: candidate function not viable: no known conversion from 'result_type' (aka 'boost::any') to 'rvalue_source_type' (aka 'rv<boost::any> &') for 1st argument void mark_finished_with_result(rvalue_source_type result_) ^ 2 errors generated. Am i missing something ? Regards, Nicolas
participants (1)
-
Nicolas P