В тесте на gcc под cgwyn деструктор в аналогичной ситуации не вызвался.
А вообще реализовать такое, наверное, не очень трудно. Ведь всё равно нужно знать, на сколько уровней вверх прыгаем... Или как иначе реализуется longjmp в рекурсивной функции?
jmp_buf envs[11];
int done = 0;
void recur(int i)
{
setjmp(envs[i]);
std::cout << i << std::endl;
if ( done )
{
return;
}
if ( i == 0 )
{
done = 1;
longjmp(envs[5], 5);
}
recur(i-1);
std::cout << i << std::endl;
}
int main(char argc, char* argv[])
{
recur(10);
return 0;
}