1 // PR c++/66260 2 // { dg-do compile { target c++14 } } 3 4 template <class> 5 bool foo = false; 6 template <> 7 bool foo<int> = true; 8 template <class T, int N> 9 bool foo<T[N]> = foo<T>; 10 11 #define assert(X) if (!(X)) __builtin_abort(); 12 main()13int main() 14 { 15 // { dg-final { scan-assembler "_Z3fooIiE" } } 16 assert(foo<int>); 17 // { dg-final { scan-assembler "_Z3fooIdE" } } 18 assert(!foo<double>); 19 // { dg-final { scan-assembler "_Z3fooIA3_iE" } } 20 assert(foo<int[3]>); 21 // { dg-final { scan-assembler "_Z3fooIA3_dE" } } 22 assert(!foo<double[3]>); 23 // { dg-final { scan-assembler "_Z3fooIA2_A5_A3_iE" } } 24 assert(foo<int[2][5][3]>); 25 // { dg-final { scan-assembler "_Z3fooIA2_A5_A3_dE" } } 26 assert(!foo<double[2][5][3]>); 27 } 28