Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Indirect recursion, dependent static variables

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.

like image 310
MFH Avatar asked Oct 25 '13 20:10

MFH


1 Answers

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 ]

like image 109
dyp Avatar answered Oct 19 '22 15:10

dyp