25#ifndef JAU_EXCEPTIONS_HPP_
26#define JAU_EXCEPTIONS_HPP_
32#include <system_error>
54 inline __attribute__((always_inline))
58 std::rethrow_exception(eptr);
59 }
catch (
const std::exception &e) {
60 return eh(e, file, line);
77 std::string backtrace_;
82 ExceptionBase(std::string&&
type, std::string
const& m,
const char* file,
int line)
noexcept;
94 const std::string&
backtrace() const noexcept {
return backtrace_; }
99 operator const std::string&()
const noexcept {
return brief_message(); };
105 virtual const char*
what() const noexcept {
153 public std::bad_alloc {
156 :
ExceptionBase(
"OutOfMemoryError", m, file, line), bad_alloc() { }
158 const char*
what() const noexcept
override {
164 public std::runtime_error {
181 const
char*
what() const noexcept
override {
186 public std::logic_error {
188 LogicError(std::string&&
type, std::string
const& m,
const char* file,
int line) noexcept
192 LogicError(std::string
const& m,
const char* file,
int line) noexcept
193 :
LogicError(
"LogicErrorStd", m, file, line) { }
202 const
char*
what() const noexcept
override {
207 public std::system_error {
223 const
char*
what() const noexcept
override {
229 public std::out_of_range {
236 :
IndexOutOfBoundsError(file, line,
"IndexOutOfBoundsError",
"Index " + std::to_string(index) +
", data length " + std::to_string(length)) { }
238 IndexOutOfBoundsError(
const std::string& msg,
const std::size_t index,
const std::size_t length,
const char* file,
int line) noexcept
239 :
IndexOutOfBoundsError(file, line,
"IndexOutOfBoundsError", msg +
": index " + std::to_string(index) +
", data length " + std::to_string(length)) { }
242 :
IndexOutOfBoundsError(file, line,
"IndexOutOfBoundsError",
"Index " + index_s +
", data length " + length_s) { }
244 IndexOutOfBoundsError(
const std::size_t index,
const std::size_t count,
const std::size_t length,
const char* file,
int line) noexcept
245 :
IndexOutOfBoundsError(file, line,
"IndexOutOfBoundsError",
"Index " + std::to_string(index) +
", count " + std::to_string(count) +
", data length " + std::to_string(length)) { }
247 const char*
what() const noexcept
override {
253 public std::invalid_argument {
262 const char*
what() const noexcept
override {
268 public std::domain_error {
277 const char*
what() const noexcept
override {
283 public std::ios_base::failure {
285 IOError(std::string
const& m,
const char* file,
int line,
const std::error_code& ec = std::io_errc::stream) noexcept
288 const char*
what() const noexcept
override {
const std::string & backtrace() const noexcept
Returns optional whole backtrace.
const std::string & whole_message() const noexcept
Returns brief message and optional whole backtrace, i.e.
ExceptionBase(std::string &&type, std::string const &m, const char *file, int line) noexcept
std::ostream & operator<<(std::ostream &out) noexcept
virtual ~ExceptionBase() noexcept=default
const std::string & brief_message() const noexcept
Returns brief message.
virtual const char * what() const noexcept
IOError(std::string const &m, const char *file, int line, const std::error_code &ec=std::io_errc::stream) noexcept
const char * what() const noexcept override
IllegalArgumentError(std::string &&type, std::string const &m, const char *file, int line) noexcept
const char * what() const noexcept override
IllegalArgumentError(std::string const &m, const char *file, int line) noexcept
const char * what() const noexcept override
IllegalStateError(std::string &&type, std::string const &m, const char *file, int line) noexcept
IllegalStateError(std::string const &m, const char *file, int line) noexcept
IndexOutOfBoundsError(const std::string &msg, const std::size_t index, const std::size_t length, const char *file, int line) noexcept
IndexOutOfBoundsError(const std::size_t index, const std::size_t count, const std::size_t length, const char *file, int line) noexcept
IndexOutOfBoundsError(const std::size_t index, const std::size_t length, const char *file, int line) noexcept
const char * what() const noexcept override
IndexOutOfBoundsError(const std::string &index_s, const std::string &length_s, const char *file, int line) noexcept
IndexOutOfBoundsError(const char *file, int line, std::string &&type, std::string const &m) noexcept
InternalError(std::string const &m, const char *file, int line) noexcept
LogicErrorBase(std::string &&type, std::string const &m, const char *file, int line) noexcept
~LogicErrorBase() noexcept override=default
LogicError(std::string &&type, std::string const &m, const char *file, int line) noexcept
const char * what() const noexcept override
LogicError(std::string const &m, const char *file, int line) noexcept
~LogicError() noexcept override=default
NotImplementedException(std::string const &m, const char *file, int line) noexcept
NullPointerException(std::string const &m, const char *file, int line) noexcept
OutOfMemoryError(std::string const &m, const char *file, int line)
const char * what() const noexcept override
~RuntimeExceptionBase() noexcept override=default
RuntimeExceptionBase(std::string &&type, std::string const &m, const char *file, int line) noexcept
RuntimeException(std::string const &m, const char *file, int line) noexcept
const char * what() const noexcept override
~RuntimeException() noexcept override=default
RuntimeException(std::string &&type, std::string const &m, const char *file, int line) noexcept
RuntimeSystemExceptionBase(std::string &&type, const std::error_code &ec, std::string const &m, const char *file, int line) noexcept
~RuntimeSystemExceptionBase() noexcept override=default
const std::error_code & code() const noexcept
RuntimeSystemException(const std::error_code &ec, std::string const &m, const char *file, int line) noexcept
const char * what() const noexcept override
~RuntimeSystemException() noexcept override=default
RuntimeSystemException(std::string &&type, const std::error_code &ec, std::string const &m, const char *file, int line) noexcept
UnsupportedOperationException(std::string const &m, const char *file, int line) noexcept
Class template jau::function is a general-purpose static-polymorphic function wrapper.
jau::function< bool(const std::exception &, const char *file, int line)> exception_handler_t
Exception handler method, should return true if not consumed or deemed an error. Shall be noexcept it...
bool handle_exception(std::exception_ptr eptr, const char *file, int line) noexcept
Handle given optional exception (nullable std::exception_ptr) and send std::exception::what() message...
__pack(...): Produces MSVC, clang and gcc compatible lead-in and -out macros.