1 // PR c++/90047 2 // { dg-do compile { target c++11 } } 3 4 template <int a> struct b { static constexpr int c = a; }; 5 template <typename> struct aa; 6 template <typename...> struct d; 7 template <typename e, typename f, typename g, typename... h> 8 struct d<e, f, g, h...> : aa<e>::i {}; 9 template <typename> struct j; 10 template <typename k, long l> struct j<k[l]> : b<true> {}; 11 struct m { 12 typedef b<0> i; 13 }; 14 template <typename> struct n : m::i {}; 15 template <bool> struct o; 16 template <typename p> struct aa { typedef p i; }; 17 template <bool ab> using ac = typename o<ab>::i; // { dg-error "incomplete" } 18 class q { 19 template <typename k, typename> using ad = ac<d<n<k>, int, int>::c>; 20 template <typename k, typename = ad<k, void>> q(k &); 21 }; 22 template <typename r> struct s { 23 s(r) { t; } 24 template <ac<!j<r>::c> *> void t(); 25 }; 26 class I { 27 friend char operator<<(char p1, I p2) { return p1 << p2; } 28 q ag; 29 }; 30 int main() { s<char[10]> a = (char *)""; } 31