@@ -307,22 +307,22 @@ namespace winrt::impl
307307 template <typename T>
308308 struct free_await_adapter
309309 {
310- T && awaitable;
310+ free_await_adapter_impl<T> && awaitable;
311311
312312 bool await_ready ()
313313 {
314- return free_await_adapter_impl<T>{ static_cast <T&&>( awaitable) } .ready ();
314+ return awaitable.ready ();
315315 }
316316
317317 template <typename U>
318318 auto await_suspend (std::experimental::coroutine_handle<U> handle)
319319 {
320- return free_await_adapter_impl<T>{ static_cast <T&&>( awaitable) } .suspend (handle);
320+ return awaitable.suspend (handle);
321321 }
322322
323323 auto await_resume ()
324324 {
325- return free_await_adapter_impl<T>{ static_cast <T&&>( awaitable) } .resume ();
325+ return awaitable.resume ();
326326 }
327327 };
328328
@@ -369,17 +369,13 @@ 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;
379-
380- notify_awaiter (T&& awaitable) : awaitable(get_awaiter(static_cast <T&&>(awaitable)))
381- {
382- }
378+ decltype (get_awaiter(std::declval<T&&>()))&& awaitable;
383379
384380 bool await_ready ()
385381 {
@@ -622,7 +618,7 @@ namespace winrt::impl
622618 throw winrt::hresult_canceled ();
623619 }
624620
625- return notify_awaiter<Expression>{ static_cast <Expression&&>(expression) };
621+ return notify_awaiter<Expression>{ get_awaiter<Expression>( static_cast <Expression&&>(expression) ) };
626622 }
627623
628624 cancellation_token<Derived> await_transform (get_cancellation_token_t ) noexcept
0 commit comments