#if __has_include () #include using namespace std; #elif defined (__clang__) && __has_include () #include using namespace std::experimental; #endif #include struct ret_type { ret_type () = default; ret_type (const ret_type&) = delete; //ret_type (ret_type&&) = default; ~ret_type() {} }; struct task { struct promise_type { auto get_return_object () -> task { return {}; } auto initial_suspend () -> suspend_always { return {}; } auto final_suspend () noexcept -> suspend_always { return {}; } void return_void () {} void unhandled_exception () { } void thing (ret_type x) {} }; }; struct awaiter { bool await_ready() const { return true; } void await_suspend (coroutine_handle<>) {} ret_type await_resume() { return {}; } }; task my_coro () { ret_type r2{co_await awaiter{}}; //ret_type r3 (std::move(r2)); } int main() { auto x = my_coro (); return 0; }