Browse Source

萃取awaitor的特征

tags/v2.9.7
tearshark 4 years ago
parent
commit
0ac9fa1b26
2 changed files with 14 additions and 10 deletions
  1. 13
    1
      librf/src/type_traits.inl
  2. 1
    9
      librf/src/when_v2.h

+ 13
- 1
librf/src/type_traits.inl View File

@@ -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());
};
}
}

+ 1
- 9
librf/src/when_v2.h View File

@@ -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;



Loading…
Cancel
Save