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