Я хотел бы знать, возможно ли найти тип результата co_await для ожидаемого: поскольку невозможно использовать co_await в неоцененном контексте, я не могу сделать
template<class Awaitable>
task<> f(Awaitable&& awaitable)
{
using result_type = decltype(co_await awaitable);
}
Есть ли В любом случае это может быть сделано?
Основная цель здесь состоит в том, чтобы определить, является ли тип result_type пустым, вот, в основном, то, что у нас есть: мы хотим запустить fire_and_forget задачу и вызвать метод по завершении, но из-за типа возврата void это не так просто
template<class Awaitable, class Success, class Failure >
detail::fire_and_forget_task call_async_then(Awaitable awaitable, Success success, Failure failure)
{
try
{
using result_type = ??
if constexpr (std::is_same_v<void, result_t>)
{
co_await awaitable;
success();
}
else
success(co_await f);
}
catch(...)
{
failure(std::current_exception());
}
}
Возможно, есть более простой способ сделать это, но сейчас я не думаю ни о каком.
Спасибо