https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112341
Arsen Arsenović <arsen at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |arsen at gcc dot gnu.org --- Comment #2 from Arsen Arsenović <arsen at gcc dot gnu.org> --- this is because the '(auto)' template parameter suppresses CO_AWAIT expansion, so we enter the following block in coroutine.cc:finish_co_await_expr /* Defer expansion when we are processing a template. FIXME: If the coroutine function's type is not dependent, and the operand is not dependent, we should determine the type of the co_await expression using the DEPENDENT_EXPR wrapper machinery. That allows us to determine the subexpression type, but leave its operand unchanged and then instantiate it later. */ if (processing_template_decl) { tree aw_expr = build5_loc (kw, CO_AWAIT_EXPR, unknown_type_node, expr, NULL_TREE, NULL_TREE, NULL_TREE, integer_zero_node); TREE_SIDE_EFFECTS (aw_expr) = true; return aw_expr; } ... which sets the type of the co_await to the unknown type