Что я делаю не так?
Вы возвращаете указатель на временный объект.
const char* what() const noexcept override
{
std::string out;
out += prefix_;
out += message_;
return out.c_str();
}
Указатель, возвращаемый из out.c_str()
, действителен только тогда, когда out
действителен.
Чтобы исправить это, вам нужно будет вызвать .c_str()
для строки, которая имеет то же время жизни, что и исключение, например, переменную-член.