Что такое исключение «recursive_init_error»?

Я решил провести тест с вычисленными переходами и локальной статикой

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? Спасибо за любые объяснения.

8
задан Mat 4 May 2015 в 10:23
поделиться