I was just trying to learn the syntax of the beginner things, and how it worked when I was making this short bit of code in VS2008. The code below works in adding numbers 1 to 499, but if I add 1 to 500, the compiler bugs out giving me:
fatal error C1001: An internal error has occurred in the compiler.
And I was just wondering why that is. Is there some limit to how much code the compiler can generate or something and it just happened to be a nice round number of 500 for me?
#include <iostream>
using namespace std;
template < int b >
struct loop {
enum { sum = loop< b - 1 >::sum + b };
};
template <>
struct loop< 0 > {
enum { sum = 0 };
};
int main() {
cout << "Adding the numbers from 1 to 499 = " << loop< 499 >::sum << endl;
return 0;
}
I assume with gcc (and by extension g++) the default maximum template recursion depth is
500as at least on my machine I managed to reproduce your problems with a (slightly better) warning message. Compilingloop<500>::sumworked fine but trying to compileloop<501>::sumfailed.If you are using gcc (or g++) the solution is to compile it with
-ftemplate-depth-##(Where ## is the maximum allowed depth).So for example to compile
main.cppwith a maximum template recursion depth of 2000Or convert the code to this:
(But I will admit the above code doesn't help you learn about template metaprogramming)