Re: Why do I get stack overflow?

2009-05-25 Thread bearophile
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?

2009-05-24 Thread Ary Borenszweig

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?

2009-05-24 Thread Moritz Warning
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?

2009-05-24 Thread Christopher Wright

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?

2009-05-24 Thread Ary Borenszweig
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)();
---