https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81917
--- Comment #5 from Paolo Carlini <paolo.carlini at oracle dot com> --- This variant causes the same ICE and it's a tad cleaner: template <typename> using a = void; template <typename, typename = void> struct b { typedef int c; }; template <typename d> class b<d, a<typename d::e>>; template <typename d, typename = typename b<d>::c> class f; template <typename> class g { }; template <typename, typename> class h { class i; typedef g<f<i>> j; class i { j k; }; }; typename h<int, int>::