R operator()(Arg... arg) { // call only if tracked object is alive if (!m_tracked.expired()) return m_wrapped(std::move(arg)...); return R(); }
R operator()() { // call only if tracked object is alive if (!m_tracked.expired()) { return m_wrapped(); } // throw exception, will be caught, then ignored ASYNCHRONOUS_THROW(boost::asynchronous::task_aborted_exception()); }
void operator()() { // call only if tracked object is alive if (!m_tracked.expired()) m_wrapped(); }
inline result_type operator()(ArgsT... args) const { return m_wrapped(args...); }