c++で階乗を計算

テンプレートメタプログラミング(template metaprogramming)で,20の階乗を計算するコード.

#include <iostream>
using namespace std;

template <int64_t N>
class X {
public:
     int64_t operator()(){
	  return X<N-1>()() * N;
     }
};

template <>
class X<1> {
public:
     int64_t operator()() { return 1;}
};

int
main()
{
     cout << X<20>()() << endl;
     return 0;
}