1// { dg-do assemble  }
2
3const double M_PI=3.14159265358979323846;
4
5template<int N,int I,int J,int K>
6inline double SineSeries()
7{
8  const double x=I*2*M_PI/N;
9  const bool go=K+1!=J;
10  return 1.0-x*x/(2*K+2)/(2*K+3)*SineSeries<N*go,I*go,J*go,(K+1)*go>();
11}
12
13template<>
14inline double SineSeries<0,0,0,0>()
15{
16  return 1.0;
17}
18
19template<int N,int I>
20inline double Sine()
21{
22  const double x=(I*2*M_PI/N);
23  return x * SineSeries<N,I,10,0>();
24}
25
26int main()
27{
28  double f=Sine<32,5>();
29  return 0;
30}
31
32