почему это вызывает прерывание, если я пытаюсь бросить что-то внутри блока catch в C ++

У меня есть следующий код C ++, и это меня удивляет. Проблема в том, что если я бросаю что-то, кроме повторного выброса внутри блока catch, программа будет завершена вызовом abort и выдаст сообщение об ошибке в GCC4, "завершение вызова после создания экземпляра 'int'". Если я просто использую "бросить;" перебросить внутрь блока catch все будет нормально.

#include <iostream> 
#include <exception>
#include <stdexcept>

using namespace std;

int main()
{
    try{
        throw std::string("first throw");
    }
    catch(std::string &x){
        try{
            std::cout << x << std::endl;
//          throw;  // if I use this line, all is fine.
            throw int(2); // but if I use this line, it causes Abort() to be called
        }
        catch (int &k){
            throw;
        }
        catch(...)
        {
            cout << "all handled here!"<< endl;
        }
    }
    catch(...){
        std::cout<< "never printed" << endl;
    }
}
10
задан Daniel Fischer 23 January 2012 в 16:50
поделиться