
On Sun, Apr 7, 2013 at 12:18 AM, Klaim - Joël Lamotte <mjklaim@gmail.com>wrote:
However the same change in a real code using WorkQueue internally and using similar code to the test makes the future::get() provide invalid pointers with values close to 0x000000 but not exactly. This code then makes access violation as the pointers are obviously not valid.
Ok I found that my "real code" is actually buggy and indeed provide a wrong pointer (for a reason I'll have to hunt). So don't bother, std::future/promise does work with my test and real code using WorkQueue/tbb::concurrent_queue but boost::future/promise doesnt. I also simplified the test (and real) code for clarity, it should be equivalent to the code from my first post: int TRUC = 42; TEST( Test_WorkQueue, future_promise_shared_work ) { WorkQueue work_queue; auto do_some_work = [&]()-> std::future<int*> { auto promise = std::make_shared<std::promise<int*>>(); work_queue.push( [=] { promise->set_value( &TRUC ); }); return promise->get_future(); }; auto ft_value = do_some_work(); work_queue.execute(); auto value = ft_value.get(); ASSERT_EQ( &TRUC, value ); }