#include template struct Fact { enum {RET = N * Fact::RET}; }; template<> struct Fact<0>{ enum {RET = 1}; }; int main() { std::cout << Fact<5>::RET << std::endl; return 0; }