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
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)(); ---
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.
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?
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.