BOOST_FORCEINLINE result_type operator()( HPX_ENUM_FWD_ARGS(N, Arg, arg)) const { try { LTM_(debug) << "Executing plain action(" << detail::get_action_name<Derived>() << ")."; // The arguments are moved here. This function is called from a // bound functor. In order to do true perfect forwarding in an // asynchronous operation. These bound variables must be moved // out of the bound object. // call the function, ignoring the return value F(HPX_ENUM_MOVE_ARGS(N, arg)); } catch (hpx::exception const& e) { if (e.get_error() != hpx::thread_interrupted) { LTM_(error) << "Unhandled exception while executing plain action(" << detail::get_action_name<Derived>() << "): " << e.what(); // report this error to the console in any case hpx::report_error(boost::current_exception()); } } // Verify that there are no more registered locks for this // OS-thread. This will throw if there are still any locks // held. util::force_error_on_lock(); return threads::terminated; }
inline bool apply_l_p_val(naming::id_type const& target, naming::address const& addr, threads::thread_priority priority, BOOST_PP_ENUM_BINARY_PARAMS(N, Arg, arg)) { typedef typename hpx::actions::extract_action<Action>::type action_type; HPX_ASSERT(components::types_are_compatible(addr.type_, components::get_component_type< typename action_type::component_type>())); apply_helper<action_type>::call(target, addr.address_, priority, util::forward_as_tuple(HPX_ENUM_MOVE_ARGS(N, arg))); return true; // no parcel has been sent (dest is local) }