Рассмотрим следующий код:
#include <iostream>
struct X{
X(){
throw 0;
}
};
void f(){
static X x;
}
int main(){
try {
f();
}
catch(int) {
std::cout << "Caught first time" << std::endl;
}
try {
f();
}
catch(int) {
std::cout << "Caught second time" << std::endl;
}
}
Вывод этой программы:
Поймано в первый раз
Поймано во второй раз
Итак, гарантируется ли стандартом, что конструктор статического объекта будет вызываться снова и снова, пока он не будет успешно завершен?Я не могу найти место в стандарте, где оно упоминается, поэтому очень приветствуются цитата или ссылка на главу и стих.
Или в моем примере присутствует какое-то неопределенное поведение?