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>::