Skip to content

Commit e161f59

Browse files
committed
stable
1 parent 936ff27 commit e161f59

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

strings/base_coroutine_foundation.h

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -307,22 +307,22 @@ namespace winrt::impl
307307
template <typename T>
308308
struct free_await_adapter
309309
{
310-
free_await_adapter_impl<T>&& awaitable;
310+
T&& awaitable;
311311

312312
bool await_ready()
313313
{
314-
return awaitable.ready();
314+
return free_await_adapter_impl<T>{ static_cast<T&&>(awaitable) }.ready();
315315
}
316316

317317
template <typename U>
318318
auto await_suspend(std::experimental::coroutine_handle<U> handle)
319319
{
320-
return awaitable.suspend(handle);
320+
return free_await_adapter_impl<T>{ static_cast<T&&>(awaitable) }.suspend(handle);
321321
}
322322

323323
auto await_resume()
324324
{
325-
return awaitable.resume();
325+
return free_await_adapter_impl<T>{ static_cast<T&&>(awaitable) }.resume();
326326
}
327327
};
328328

@@ -369,13 +369,17 @@ namespace winrt::impl
369369
template <typename T, std::enable_if_t<has_awaitable_free<T>::value, int> = 0>
370370
auto get_awaiter(T&& value) noexcept
371371
{
372-
return free_await_adapter<T>{ { static_cast<T&&>(value) }};
372+
return free_await_adapter<T>{ static_cast<T&&>(value) };
373373
}
374374

375375
template <typename T>
376376
struct notify_awaiter
377377
{
378-
decltype(get_awaiter(std::declval<T&&>()))&& awaitable;
378+
decltype(get_awaiter(std::declval<T&&>())) awaitable;
379+
380+
notify_awaiter(T&& awaitable) : awaitable(get_awaiter(static_cast<T&&>(awaitable)))
381+
{
382+
}
379383

380384
bool await_ready()
381385
{
@@ -618,7 +622,7 @@ namespace winrt::impl
618622
throw winrt::hresult_canceled();
619623
}
620624

621-
return notify_awaiter<Expression>{ get_awaiter<Expression>(static_cast<Expression&&>(expression)) };
625+
return notify_awaiter<Expression>{ static_cast<Expression&&>(expression) };
622626
}
623627

624628
cancellation_token<Derived> await_transform(get_cancellation_token_t) noexcept

0 commit comments

Comments
 (0)