@@ -104,5 +104,17 @@ RESUMEF_NS | |||
{ | |||
return detail::get_awaitor_impl(static_cast<T&&>(value), 123); | |||
} | |||
} | |||
template<class _Ty, class = std::void_t<>> | |||
struct awaitor_traits{}; | |||
template<class _Ty> | |||
struct awaitor_traits<_Ty, | |||
std::void_t<decltype(get_awaitor(std::declval<_Ty>()))> | |||
> | |||
{ | |||
using type = decltype(get_awaitor(std::declval<_Ty>())); | |||
using value_type = decltype(std::declval<type>().await_resume()); | |||
}; | |||
} | |||
} |
@@ -97,17 +97,9 @@ RESUMEF_NS | |||
using value_type = ignore_type; | |||
}; | |||
template<class _Ty> | |||
struct get_await_resume_result_type | |||
{ | |||
using value_type = decltype(std::declval<std::remove_reference_t<_Ty>>().await_resume()); | |||
}; | |||
template<class _Ty> | |||
using awaitor_result_t = typename convert_void_2_ignore< | |||
typename get_await_resume_result_type< | |||
decltype(traits::get_awaitor(std::declval<_Ty>())) | |||
>::value_type | |||
typename traits::awaitor_traits<_Ty>::value_type | |||
>::value_type; | |||