https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92948
--- Comment #3 from Marek Polacek <mpolacek at gcc dot gnu.org> --- Test I've been playing with: struct A { constexpr A(int) { } }; template<A> struct B { using U = unsigned; }; template<A a> using U = B<a>; //template<int X, typename Y = typename B<1>::U> // ok template<int X, typename Y = typename U<X>::U> // ICE //template<int X, typename Y = typename B<X>::U> // error void foo() { } void g () { foo<1>(); }