// RUN: %clang_cc1 -triple x86_64-apple-darwin9 %s -stdlib=libc++ -std=c++1z -fcoroutines-ts -fsyntax-only namespace std::experimental { template struct coroutine_handle { coroutine_handle() = default; static coroutine_handle from_address(void *) noexcept; }; template <> struct coroutine_handle { static coroutine_handle from_address(void *) noexcept; coroutine_handle() = default; template coroutine_handle(coroutine_handle) noexcept; }; template struct void_t_imp { using type = void; }; template using void_t = typename void_t_imp::type; template struct traits_sfinae_base {}; template struct traits_sfinae_base> { using promise_type = typename T::promise_type; }; template struct coroutine_traits : public traits_sfinae_base {}; } struct suspend_never { bool await_ready() noexcept; void await_suspend(std::experimental::coroutine_handle<>) noexcept; void await_resume() noexcept; }; struct MoveOnly { MoveOnly() {}; MoveOnly(const MoveOnly&) = delete; MoveOnly(MoveOnly&&) noexcept {}; ~MoveOnly() {}; }; template struct task { struct promise_type { auto initial_suspend() { return suspend_never{}; } auto final_suspend() { return suspend_never{}; } auto get_return_object() { return task{}; } static void unhandled_exception() {} void return_value(T&& value) {} }; }; task f() { MoveOnly value; co_return value; } int main() { f(); return 0; } // expected-no-diagnostics