Я решил сделать тест с вычисленным gotos и локальной статикой
void g() { std::cout << "init "; }
void f() {
int z = 0;
y: z++;
static int x =
(g(), z == 1 ? ({ goto *&&y; 0; }) : 0);
}
int main() { f(); std::cout << "!"; f(); }
Я хотел посмотреть, будет ли вывод «init init!». Но, к моему удивлению, я не получил этот вывод, а вместо этого GCC обработал его изящно, выдав во время выполнения:
init terminated by recursive_init_error: exception
Что это за исключение? Это стандартное исключение? C ++ 03 или C ++ 0x? Спасибо за любые объяснения.