#include <iostream> template<int i> struct fact { static const int value = i * fact<i - 1>::value; }; template<> struct fact<0> { static const int value = 1; }; int main() { std::cout << fact<10>::value << std::endl; }