Методы-деструктор и what () должны быть помечены как нет.
В MS-Studio он игнорирует спецификатор throw и прекрасно компилируется, но для соответствия стандарту и переносимости вы должны добавить его в свой код.
// What is a no throw operation.
virtual const char* what() const throw ()
{
return error_.c_str();
}
Другие комментарии:
Я бы не наследовал напрямую от исключения.
Посмотрите на стандартные исключения, полученные из исключения, и посмотрите, соответствуют ли они требованиям.
Вместо использования кода ошибки. Вы можете использовать иерархию типов исключений. Это облегчает ловлю.
class MyException: public std::runtime_error
{ // STUFF .. Put all the error message stuff here
};
class MyFOO_Exception: public MyException
{ // STUFF
};
class MyBAR_Exception: public MyException
{ // STUFF
}