https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96110
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- This isn't specific to catch handlers, other compilers accept that nonsense function declaration in various contexts, and GCC rejects them all: using F = auto () -> auto; template<typename T> struct X { }; X<auto () -> auto> x; But if you ask Clang to generate debug info for this code it ICEs.