1 // PR middle-end/78716 2 // { dg-do compile } 3 4 template <typename = int, typename = int, typename = int, typename = int, 5 typename = int> 6 struct a; 7 template <typename> struct b; 8 template <typename = int, typename d = void> class e : b<d>::c { 9 public: 10 typedef e f; 11 typedef typename b<d>::c g; e(__builtin_va_list * s)12 e(__builtin_va_list *s) : g(__builtin_va_arg(*s, int)) {} 13 }; 14 template <> struct b<void> { typedef e<> c; }; 15 template <> struct e<> { template <typename h> e(h); }; 16 template <typename i> class a<i> : public e<i> {}; 17 template <typename i, typename j, typename k, typename l> 18 class a<i, j, k, l> : e<typename a<j>::f> { 19 public: 20 template <typename m, typename n, typename o, typename p> 21 a(a<m, n, o, p>) : a::f(0) {} 22 }; 23 template <typename i, typename j, typename k, typename l> a<> r(i, j, k, l); 24 void q() { a<float, float>(r(4, 6, 9, 7)); } 25