https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104184
--- Comment #3 from Marc Glisse <glisse at gcc dot gnu.org> --- comment #1 actually reduces to struct voider { using type = void; }; template <typename P> struct rename : P {}; template <typename> using ignore = voider; template <typename T> typename ignore<typename rename<T>::type>::type g(T a) {} void f() { g(1); } (still questionable and rejected by clang, I think I'll also attach the compressed initial preprocessed file, in case the reductions hit different bugs)