Re: Why do I get stack overflow?
Ary Borenszweig: > Thanks. Later in my head I instantiated the template and noticed the > problem. In time I have created similar problems in my code 2-3 times, missing a "static" before some "if". Can't the compiler help spot such bugs? If the variables a dynamic if works on are constants (expecially if they are types) the compiler may give a warning... Bye, bearophile
Re: Why do I get stack overflow?
Moritz Warning escribió: On Sun, 24 May 2009 20:49:53 -0300, Ary Borenszweig wrote: When I compile this code I get "stack overflow" printed in the console. Anyone know why? --- int fact(int X)() { if(X == 0) { return 1; } else { int temp = fact!(X - 1)(); return X * temp; } } const someVar = fact!(0)(); --- Because you generate fact!(-1)(), fact!(-2)() and so on at compile time. You recursive template doesn't terminate. Thanks. Later in my head I instantiated the template and noticed the problem.
Re: Why do I get stack overflow?
On Sun, 24 May 2009 20:49:53 -0300, Ary Borenszweig wrote: > When I compile this code I get "stack overflow" printed in the console. > Anyone know why? > > --- > int fact(int X)() { > if(X == 0) { > return 1; > } else { > int temp = fact!(X - 1)(); > return X * temp; > } > } > > const someVar = fact!(0)(); > --- Because you generate fact!(-1)(), fact!(-2)() and so on at compile time. You recursive template doesn't terminate.
Re: Why do I get stack overflow?
Ary Borenszweig wrote: When I compile this code I get "stack overflow" printed in the console. Anyone know why? --- int fact(int X)() { if(X == 0) { return 1; } else { int temp = fact!(X - 1)(); return X * temp; } } const someVar = fact!(0)(); --- Like Moritz said. You need to use "static if" there rather than "if".
Why do I get stack overflow?
When I compile this code I get "stack overflow" printed in the console. Anyone know why? --- int fact(int X)() { if(X == 0) { return 1; } else { int temp = fact!(X - 1)(); return X * temp; } } const someVar = fact!(0)(); ---