Здравствуйте.
Мне требуется определить несколько собственных типов данных, для которых определенны какие то операции, которые могут выбрасывать ошибки. Как пример:
int main() {
int length = 10;
auto arr = MyAwesomeArray<int>(length);
arr[15] = 2; // IndexOutOfRangeException();
return 0;
}
Я описал класс ошибки таким образом
class IndexOutOfRangeException : public std::exception {
private:
std::string m_error;
public:
explicit IndexOutOfRangeException(std::string error) : m_error(std::move(error)) {}
const char *what() const noexcept override { return m_error.c_str(); }
};
Который выдает такое сообщение
terminate called after throwing an instance of 'IndexOutOfRangeException'
what(): some error message
И все хорошо работает (ошибка вызывается, программа завершается).
Но в таком случае крайне неудобно пользоваться этими ошибками, потому что в данном сообщении не показывается ни файл, ни строка, на которой было выброшено исключение. Как сделать такой же (или похожий) вывод, как и для стандартных ошибок?
test.cpp: In function ‘int main()’:
test.cpp:29:5: error: ‘foobar’ was not declared in this scope
29 | foobar();
| ^~~~~~