>>355
こういうの?

template <int N> struct Factorial{ enum{ value = N * Factorial<N-1>::value }; };
template <> struct Factorial<0>{ enum{ value = 1 }; };
int
fact( int n )
{
    int fact = 1;
    for( int i = n; i >= 2; --i )
        fact *= i;
    return fact;
}
int
main()
{
    std::cout << Factorial<0>::value << std::endl;
    std::cout << fact( 0 ) << std::endl;
    return 0;
}