1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only %s 2*67e74705SXin Li 3*67e74705SXin Li template<unsigned I> 4*67e74705SXin Li struct FibonacciEval; 5*67e74705SXin Li 6*67e74705SXin Li template<unsigned I> 7*67e74705SXin Li struct Fibonacci { 8*67e74705SXin Li enum { value = FibonacciEval<I-1>::value + FibonacciEval<I-2>::value }; 9*67e74705SXin Li }; 10*67e74705SXin Li 11*67e74705SXin Li template<unsigned I> 12*67e74705SXin Li struct FibonacciEval { 13*67e74705SXin Li enum { value = Fibonacci<I>::value }; 14*67e74705SXin Li }; 15*67e74705SXin Li 16*67e74705SXin Li template<> struct Fibonacci<0> { 17*67e74705SXin Li enum { value = 0 }; 18*67e74705SXin Li }; 19*67e74705SXin Li 20*67e74705SXin Li template<> struct Fibonacci<1> { 21*67e74705SXin Li enum { value = 1 }; 22*67e74705SXin Li }; 23*67e74705SXin Li 24*67e74705SXin Li int array5[Fibonacci<5>::value == 5? 1 : -1]; 25*67e74705SXin Li int array10[Fibonacci<10>::value == 55? 1 : -1]; 26*67e74705SXin Li 27*67e74705SXin Li template<unsigned I> 28*67e74705SXin Li struct FibonacciEval2; 29*67e74705SXin Li 30*67e74705SXin Li template<unsigned I> 31*67e74705SXin Li struct Fibonacci2 { 32*67e74705SXin Li static const unsigned value 33*67e74705SXin Li = FibonacciEval2<I-1>::value + FibonacciEval2<I-2>::value; 34*67e74705SXin Li }; 35*67e74705SXin Li 36*67e74705SXin Li template<unsigned I> 37*67e74705SXin Li struct FibonacciEval2 { 38*67e74705SXin Li static const unsigned value = Fibonacci2<I>::value; 39*67e74705SXin Li }; 40*67e74705SXin Li 41*67e74705SXin Li template<> struct Fibonacci2<0> { 42*67e74705SXin Li static const unsigned value = 0; 43*67e74705SXin Li }; 44*67e74705SXin Li 45*67e74705SXin Li template<> struct Fibonacci2<1> { 46*67e74705SXin Li static const unsigned value = 1; 47*67e74705SXin Li }; 48*67e74705SXin Li 49*67e74705SXin Li int array5_2[Fibonacci2<5>::value == 5? 1 : -1]; 50*67e74705SXin Li int array10_2[Fibonacci2<10>::value == 55? 1 : -1]; 51*67e74705SXin Li 52*67e74705SXin Li template<unsigned I> 53*67e74705SXin Li struct Fibonacci3 { 54*67e74705SXin Li static const unsigned value = Fibonacci3<I-1>::value + Fibonacci3<I-2>::value; 55*67e74705SXin Li }; 56*67e74705SXin Li 57*67e74705SXin Li template<> struct Fibonacci3<0> { 58*67e74705SXin Li static const unsigned value = 0; 59*67e74705SXin Li }; 60*67e74705SXin Li 61*67e74705SXin Li template<> struct Fibonacci3<1> { 62*67e74705SXin Li static const unsigned value = 1; 63*67e74705SXin Li }; 64*67e74705SXin Li 65*67e74705SXin Li int array5_3[Fibonacci3<5>::value == 5? 1 : -1]; 66*67e74705SXin Li int array10_3[Fibonacci3<10>::value == 55? 1 : -1]; 67