Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
May 24, 2009 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)(); --- |
May 24, 2009 Re: Why do I get stack overflow? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ary Borenszweig | 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.
|
May 24, 2009 Re: Why do I get stack overflow? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ary Borenszweig | 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".
|
May 25, 2009 Re: Why do I get stack overflow? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Moritz Warning | 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.
|
May 25, 2009 Re: Why do I get stack overflow? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ary Borenszweig | 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
|
Copyright © 1999-2021 by the D Language Foundation