Как правильно переопределить метод what() в собственном классе исключений?

Нужно создать класс исключений, в котором переопределить виртуальную функцию what(). Компилятор выдает следующее сообщение: "объявленная с использованием ключевого слова Override функция-член не переопределяет член базового класса".

class incompatible_dim_exception : public std::exception
{
private:
    const char* name;
public:
    incompatible_dim_exception(const char* m_name) : name(m_name){};
    const char* what() override{
        return name;
    }
};

Ответы (3 шт):

Автор решения: Harry

Попробуйте переопределить ее так, как указано в стандарте:

const char* what() const noexcept override;
→ Ссылка
Автор решения: вася

Укажите правильное определение:

const char* what() const noexcept override {
    return name;
}
→ Ссылка
Автор решения: user7860670

В этом случае правильнее будет не переопределять what, а наследовать от std::runtime_error, которая из коробки поддерживает хранение и отдачу некоторого текста. Также это позволит избавиться от проблем с потенциальныv протуханием буфера, на который указывает m_name:

#include <stdexcept>

class incompatible_dim_exception : public ::std::runtime_error
{
public: explicit
    incompatible_dim_exception(char const * const psz_name) : runtime_error{psz_name}{}
};
→ Ссылка