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