template<unsigned long int _Val>

class Factorial

{

public:

static const unsigned long int value = (_Val * Factorial<_Val - 1>::value);

};


template<>

class Factorial<1>

{

public:

static const unsigned long int value = 1;

};


컴파일러가 계산해줌.