-
Notifications
You must be signed in to change notification settings - Fork 31
/
error.hpp
27 lines (21 loc) · 857 Bytes
/
error.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#pragma once
#ifndef WAYWARD_SUPPORT_ERROR_HPP_INCLUDED
#define WAYWARD_SUPPORT_ERROR_HPP_INCLUDED
#include <stdexcept>
#include <wayward/support/format.hpp>
namespace wayward {
std::vector<std::string> current_backtrace();
std::string demangle_symbol(const std::string&);
struct Error : std::runtime_error {
explicit Error(const std::string& message) : std::runtime_error(message), backtrace_(current_backtrace()) {}
virtual ~Error() {}
const std::vector<std::string>& backtrace() const { return backtrace_; }
private:
std::vector<std::string> backtrace_;
};
template <typename ErrorType, typename... Args>
void fail(const std::string& format, Args&&... formatting_arguments) {
throw ErrorType{wayward::format(format, std::forward<Args>(formatting_arguments)...)};
}
}
#endif // WAYWARD_SUPPORT_ERROR_HPP_INCLUDED