// Taken from https://en.wikipedia.org/wiki/Template_metaprogramming #include template class factorial { public: static constexpr long long value = N * factorial::value; }; template<> class factorial<0> { public: static constexpr long long value = 1; }; int main() { constexpr long long X = 12; std::cout << factorial::value << std::endl; return 0; }