1 // { dg-do compile { target c++17 } } 2 3 #include "coro.h" 4 5 // Test that we get matching types to traits and promise param 6 // preview. 7 8 // A separate issue from allowing non-class return types. 9 struct Fake {} ; 10 11 template<typename R, typename CallOp, typename ...T> 12 struct std::coroutine_traits<R, CallOp, T...> { 13 struct promise_type { 14 promise_type (CallOp op, T ...args) {} 15 Fake get_return_object() { return {}; } 16 std::suspend_always initial_suspend() { return {}; } 17 std::suspend_never final_suspend() noexcept { return {}; } 18 void return_void() {} 19 void unhandled_exception() {} 20 }; 21 }; 22 23 24 struct Foo 25 { 26 Fake operator() (int a) { 27 co_return; 28 } 29 }; 30