| // { dg-do run } |
| extern "C" void abort (); |
| |
| template <int a> inline int fact2 (); |
| |
| template <int a> inline int fact () |
| { |
| return a * fact2<a-1> (); |
| } |
| |
| template <> inline int fact<1> () |
| { |
| return 1; |
| } |
| |
| template <int a> inline int fact2 () |
| { |
| return a*fact<a-1>(); |
| } |
| |
| template <> inline int fact2<1> () |
| { |
| return 1; |
| } |
| |
| int main() |
| { |
| if (fact<3> () != 6 || fact<1> () != 1 |
| || fact<3> () != 6 || fact<1> () != 1 || fact<1+0> () != 1) |
| abort (); |
| if (fact2<3> () != 6 || fact2<1> () != 1 |
| || fact2<3> () != 6 || fact2<1> () != 1 || fact2<1+0> () != 1) |
| abort (); |
| if (fact2<4> () != 24 || fact<4> () != 24) |
| abort (); |
| } |