https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97561
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |INVALID --- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- This is intentional, see https://wg21.link/lwg3460 which is expected to be voted into the draft in a few weeks. The inheritance requires unimplementable and nonsensical behaviour. You can still do this: std::coroutine_handle<task::promise_type> c; std::coroutine_handle<> c2 = c; You just can't bind a coroutine_handle<> reference to a coroutine_handle<P> directly.