message: fixes for async
diff: namespace ospcommon {
  template<typename TASK_T>
  - using operator_return_t = decltype(&TASK_T::operator());
  + using operator_return_t = typename std::result_of<TASK_T()>::type;
  // NOTE(jda) - This abstraction takes a lambda which should take captured
  // variables by *value* to ensure no captured references race
  // with the task itself.
  template<typename TASK_T>
  - inline auto async(TASK_T&& fcn) -> operator_return_t<TASK_T>
  + inline auto async(TASK_T&& fcn) -> std::future<operator_return_t<TASK_T>>
  {
  static_assert(has_operator_method<TASK_T>::value,
  "ospcommon::schedule() requires the implementation of method "
  @@ -40,7 +40,7 @@ namespace ospcommon {
  using package_t = std::packaged_task<operator_return_t<TASK_T>()>;
  auto task = new package_t(std::forward<TASK_T>(fcn));
  - auto future = task.get_future();
  + auto future = task->get_future();
  schedule([=](){ (*task)(); delete task; });
  