Is the result of the following indirect recursion defined by the standard or is it undefined behavior?
auto abc() -> int ;
auto xyz() -> int {
static int instance = 3 + abc();
return instance;
}
auto abc() -> int {
static int instance = 2 + xyz();
return instance;
}
int main() {
int tmp = xyz();//or abc();
}
In VS2012 tmp is 5 but I'm not sure if that's guaranteed by the standard.
It's undefined behaviour.
[statement.decl]/4
If control re-enters the declaration recursively while the variable is being initialized, the behavior is undefined. [Example:
int foo(int i) { static int s = foo(2*i); // recursive call - undefined return i+1; }
— end example ]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With