void future_function_pointers(Executor& exec) { future_void_f1_count.store(0); future_void_f2_count.store(0); future_int_f1_count.store(0); future_int_f2_count.store(0); future<void> f1 = dataflow(exec, &future_void_f1 , async(&future_void_sf1, shared_future<void>(make_ready_future())) ); f1.wait(); HPX_TEST_EQ(future_void_f1_count, 2u); future_void_f1_count.store(0); future<void> f2 = dataflow(exec, &future_void_f2 , async(&future_void_sf1, shared_future<void>(make_ready_future())) , async(&future_void_sf1, shared_future<void>(make_ready_future())) ); f2.wait(); HPX_TEST_EQ(future_void_f1_count, 2u); HPX_TEST_EQ(future_void_f2_count, 1u); future_void_f1_count.store(0); future_void_f2_count.store(0); future_int_f1_count.store(0); future_int_f2_count.store(0); future<int> f3 = dataflow(exec, &future_int_f1 , make_ready_future() ); HPX_TEST_EQ(f3.get(), 1); HPX_TEST_EQ(future_int_f1_count, 1u); future_int_f1_count.store(0); future<int> f4 = dataflow(exec, &future_int_f2 , dataflow(exec, &future_int_f1, make_ready_future()) , dataflow(exec, &future_int_f1, make_ready_future()) ); HPX_TEST_EQ(f4.get(), 2); HPX_TEST_EQ(future_int_f1_count, 2u); HPX_TEST_EQ(future_int_f2_count, 1u); future_int_f1_count.store(0); future_int_f2_count.store(0); future_int_f_vector_count.store(0); std::vector<future<int> > vf; for(std::size_t i = 0; i < 10; ++i) { vf.push_back(dataflow(exec, &future_int_f1, make_ready_future())); } future<int> f5 = dataflow(exec, &future_int_f_vector, std::ref(vf)); HPX_TEST_EQ(f5.get(), 10); }