¿Plantilla de metaprogramación de límites de recursión?

Estoy escribiendo una clase de plantilla muy simple utilizando Metaprogramming para calcular la suma en tiempo de compilación, como se muestra a continuación:

#include <iostream>

using namespace std;

template<int N>
class Sum
{
    public:
        enum {value = N + Sum<N-1>::value };
};

template<>
class Sum<0>
{
    public:
        enum {value = 0};
};


int main()
{
    cout << Sum<501>::value << endl;
}

Lo interesante es:

Cuando imprimo Suma <500> y debajo, funciona bien

Cuando se trata de Suma <501>, la compilación falló con:

sum.cpp: 9: instanciado desdeSum<500>' sum.cpp:9: instantiated fromSuma <501> 'sum.cpp: 22: instanciada desde aquí

sum.cpp: 9: error: tipo incompletoSum<1>' used in nested name specifier sum.cpp:9: error: enumerator value forvalor 'no constante entero

Suma <501> reportará error de Suma <1>, Suma <502> reportará error de Suma <2>, la diferencia es siempre 2, me parece que el compilador tiene un límite de recursos de 500.

¿Alguna idea sobre esto? ¿Y es su manera de romper estos límites?

Gracias.

Editar:
Gracias, no se trata del algoritmo, sino de la limitación del compilador. Sé que hay una manera fácil de obtener la suma :)

Edit2:

Use gcc 4.6 +, el mensaje de error es mucho más útil

sum.cpp: 9: 14: error: la profundidad de creación de instancias de la plantilla excede el máximo de 1024 (use -ftemplate-depth = para aumentar el máximo) instanciación 'class Sum <1>' sum.cpp: 9: 14: instanciada de forma recursiva desde 'Sum <1024> 'sum.cpp: 9: 14: instanciado de' Suma <1025> 'sum.cpp: 22: 22: instanciado desde aquí

así que sí, usar ftemplate-depth es la manera correcta. Pero ¿qué tal en las ventanas? los límites ascendentes para VC9.0 son 499, y parece que no hay opción para establecer la profundidad de la plantilla, veaaquí

Respuestas a la pregunta(2)

Su respuesta a la pregunta