Back to slide -- Keyboard shortcut: 'u'  previous -- Keyboard shortcut: 'p'                metaprogramming/iteration/fac-3.cc - The factorial function programmed in struct - with recursion.Lecture 6 - slide 39 : 40
Program 3

// Factorial defined as a static int member in a struct. 
// Can only be used a compile time
// Does not rely on C++11 facilities.

#include <iostream>

// Defining and holding the factorial value in a static int member.
template<int N>
struct Fac{
  static const int value = N * Fac<N-1>::value;
};

template<>                  // A specialization for N = 1 
struct Fac<1>{
  static const int value = 1;
};


int main(){
  using namespace std;

  // Call of fac at compile time:
  const int res = Fac<10>::value;
  cout << "fac(10) = " << res << endl;             // fac(10) = 3628800
  cout << "fac(5) = " << Fac<5>::value << endl;    // fac(5) = 120

  // Fac cannot be called with run time input.
}