https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98056
--- Comment #4 from Nils Gladitz <nilsgladitz at gmail dot com> --- Not sure if this is helpful at all but I think I ran into the same issue and reduced it to the following which is slightly shorter but also keeps the standard C++ includes intact (manually reintroduced them after reduction): #include <coroutine> #include <initializer_list> struct a { a(); }; struct task { struct promise_type { std::suspend_always initial_suspend(); std::suspend_always final_suspend() noexcept; void unhandled_exception(); task get_return_object(); }; std::suspend_always c(a); a bar(std::initializer_list<a>); task e() { co_await c(bar({a{}})); } };