答案:
template<size_t n> struct factorial
{
enum{ val = n * factorial<n-1>::val };
};
template<> struct factorial<1>
{
enum{ val = 1 };
};
template<size_t n> struct factorial_acc
{
enum{ val = factorial<n>::val + factorial_acc<n-1>::val };
};
template<> struct factorial_acc<1>
{
enum{ val = factorial<1>::val };
};
#include <iostream>
using namespace std;
int main( void )
{
cout << factorial_acc<5>::val << endl;
return 0;
}
---