#include using std::cout; using std::endl; template class factorial { public: enum { val = (X * factorial::val) }; }; template<> class factorial<1> { public: enum { val = 1 }; }; int main(int argc, char** argv) { cout << "factorial<1>::val = " << factorial<1>::val << endl; cout << "factorial<2>::val = " << factorial<2>::val << endl; cout << "factorial<3>::val = " << factorial<3>::val << endl; cout << "factorial<4>::val = " << factorial<4>::val << endl; cout << "factorial<5>::val = " << factorial<5>::val << endl; cout << "factorial<6>::val = " << factorial<6>::val << endl; cout << "factorial<7>::val = " << factorial<7>::val << endl; cout << "factorial<8>::val = " << factorial<8>::val << endl; cout << "factorial<9>::val = " << factorial<9>::val << endl; cout << "factorial<10>::val = " << factorial<10>::val << endl; cout << "factorial<11>::val = " << factorial<11>::val << endl; cout << "factorial<12>::val = " << factorial<12>::val << endl; return 0; }