Каково стандартное поведение в случаях, когда функция исключает исключение из списка исключенных исключений? Например, когда я запускаю этот код:Спецификация исключений в C++ - обработка недопустимых исключений
#include <iostream>
#include <cstdlib>
using namespace std;
void NotLegal() throw(char) {
throw 42;
}
void myunexpected() {
cout << "exception not in list\n";
cin.get();
exit(0);
}
int main()
{
set_unexpected(myunexpected);
try {
NotLegal();
}
catch(...) {
cout << "exception catched";
cin.get();
}
return 0;
}
Он ведет себя по-разному на GCC и Visual Studio компиляторы C++:
- На VS 2010 не ожидается исключение пойманной в общем обработчика исключений.
- Функция GCC
unexpected()
вызывается вместо исключения исключения.
Почему это различие? Почему компилятор MS C++ не вызывает обратный вызов unexpected()
?
Вы пытались изменить свой пример? Просто убедитесь, что вы не получите автоматического преобразования между 42 и символом. Просто попробуйте throw() вместо throw (char). –
это то же самое с пустым списком исключений. –