Рассмотрим следующую программу.
struct s { ~s(); };
void f()
{
static s a;
}
struct t { ~t() { f(); } };
int main()
{
static s b;
static t c;
}
Я пытаюсь выяснить, какие именно стандартные гарантии в отношении уничтожения статических объектов, но я считаю, что текст С++ 03 [basic.start.term] недостаточен.
Определено ли поведение программы? Если да, то каков порядок разрушения статических объектов a
, b
и c
? Что произойдет, если s::~s
выбрасывает исключение? Пожалуйста, объясните свои аргументы, желательно с кавычками из стандарта.