https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114349
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Reduced testcase: using A = struct {}; template <template <typename> class, typename, typename> using B = A; template <typename T> using C = typename T::D; struct E { using D = B<C, int, A>; }; template <class> constexpr bool foo (A) { return false; } template <class T> struct F { using G = T; using H = E; F(const F &); void operator=(F) noexcept(foo <G> (H::D{})); }; template <typename, typename, typename> using I = F<int>; template <typename K, typename V, typename H = K> using J = I<K, V, H>; struct K { typedef J<long, char> L; L k; K(); }; struct M { bool bar () const; K::L m; }; K n; bool M::bar () const { n.k = m; return true; }