#include unsigned fac(unsigned n) { unsigned i = 1; while (n != 0) i *= n--; return i; } template struct Fac { static unsigned const i = Fac::i * N; }; template<> struct Fac<0> { static unsigned const i = 1; }; int main() { std::cout << fac(10) << std::endl; std::cout << Fac<10>::i << std::endl; }