Yes it is indeed an undefined behavior because you are returning a reference to automatic variable which will be destroyed when execution of bar()
completes
You can avoid it by writing:
#include <iostream>
using namespace std;
int& bar()
{
static int n = 10;
return n;
}
int main() {
int& i = bar();
cout<<i<<endl;
return 0;
}
In this case static variable n
will not be destroyed when execution of bar()
completes, it will be destroyed when your program terminates.