Example with compile-time computation:
#include <iostream>
template<int N>
struct F
{
static const int value = N * F<N - 1>::value;
};
template<>
struct F<0>
{
static const int value = 1;
};
int main()
{
std::cout << F<10>::value << "\n";
}