1// { dg-do run } 2extern "C" void abort (); 3 4template <int a> inline int fact2 (); 5 6template <int a> inline int fact () 7{ 8 return a * fact2<a-1> (); 9} 10 11template <> inline int fact<1> () 12{ 13 return 1; 14} 15 16template <int a> inline int fact2 () 17{ 18 return a*fact<a-1>(); 19} 20 21template <> inline int fact2<1> () 22{ 23 return 1; 24} 25 26int main() 27{ 28 if (fact<3> () != 6 || fact<1> () != 1 29 || fact<3> () != 6 || fact<1> () != 1 || fact<1+0> () != 1) 30 abort (); 31 if (fact2<3> () != 6 || fact2<1> () != 1 32 || fact2<3> () != 6 || fact2<1> () != 1 || fact2<1+0> () != 1) 33 abort (); 34 if (fact2<4> () != 24 || fact<4> () != 24) 35 abort (); 36} 37