Я пытаюсь создать настраиваемое исключение, которое происходит от std::exception
и переопределяет what()
. Сначала я написал это следующим образом:
class UserException : public std::exception
{
private:
const std::string message;
public:
UserException(const std::string &message)
: message(message)
{}
virtual const char* what() const override
{
return message.c_str();
}
};
Это отлично работает в VS2012, но не компилируется в GCC 4.8 с -std=c++11
:
error: looser throw specifier для 'virtual const char * UserException:: what() const
Итак, я добавляю noexcept
:
virtual const char* what() const noexcept override
Это отлично работает в GCC, но не компилируется в Visual Studio (потому что VS 2012 не поддерживает noexcept
):
ошибка C3646: "noexcept": неизвестный спецификатор переопределения
Каков рекомендуемый способ справиться с этим? Я хочу, чтобы один и тот же код компилировался с обоими компиляторами, и я использую С++ 11, поэтому я не могу скомпилировать с помощью -std
.