#include <iostream>
struct ICantChange
{
virtual ~ICantChange() {}
};
struct ClassThatThrows
{
virtual ~ClassThatThrows() noexcept(false)
{
throw 44;
}
};
struct Test : ICantChange
{
~Test()
{
}
ClassThatThrows instance;
};
main()
{
try
{
Test obj;
}
catch(int except)
{
std::cout << "caught" << std::endl;
}
}
Этот код выдает сообщение об ошибке:
main.cpp:20:5: error: looser throw specifier for ‘virtual Test::~Test() noexcept (false)’
~Test()
^
main.cpp:6:13: error: overriding ‘virtual ICantChange::~ICantChange() noexcept’
virtual ~ICantChange() {}
Чтобы исправить эту ошибку, я вижу только один вариант - добавить noexcept(false)
к деструктору класса ICantChange
, который я не могу, потому что этокласс библиотеки.
Я знаю, что бросать деструкторы - это плохо, но теперь у меня есть Test
класс, и я хочу ловить исключения, которые выбрасываются при его разрушении.
Может кто-нибудь предложить решение