Читаю Меерса дошёл до метапрограммирования, следующий код (из книги) провёл меня в восторг:
#include <iostream>
using namespace std;
template<unsigned n>
struct Factorial
{
enum{value = n*Factorial<n-1>::value};
};
template<>
struct Factorial<0>
{enum{value = 1};};
int main()
{
cout << Factorial<1>::value << endl;
cout << Factorial<100>::value << endl;
return 0;
}
Теоритически всё красиво: факториал вычисляется во время компиляции, но на практике, программа выводит:
1
0
почему ?
gcc (SUSE Linux) 4.4.1 [gcc-4_4-branch revision 150839]