12 #ifndef DOCWIRE_NESTED_EXCEPTION_H
13 #define DOCWIRE_NESTED_EXCEPTION_H
34 class nested :
virtual public std::nested_exception,
public T
47 : T(std::forward<T>(t))
83 template <
typename Inner,
typename Outer>
88 if constexpr (std::is_same_v<std::remove_cvref_t<Inner>, std::exception_ptr>)
89 std::rethrow_exception(std::forward<Inner>(inner));
91 throw std::forward<Inner>(inner);
118 template <
typename Inner,
typename Outer,
typename... Rest>
121 return make_nested(
make_nested(std::forward<Inner>(inner), std::forward<Outer>(outer)), std::forward<Rest>(rest)...);
144 template <
typename Inner,
typename Outer,
typename... Rest>
147 return std::make_exception_ptr(
make_nested(std::forward<Inner>(inner), std::forward<Outer>(outer), std::forward<Rest>(rest)...));
A template class that simplifies the creation of nested exceptions.
nested(const T &t)
Constructs a nested object from a const lvalue reference to an object of type T.
nested(T &&t)
Constructs a nested object from an rvalue reference to an object of type T.
Provides features for reporting and handling errors with context data using nested exceptions.
auto make_nested(Inner &&inner, Outer &&outer)
Creates a nested exception from an inner exception and an outer exception.
std::exception_ptr make_nested_ptr(Inner &&inner, Outer &&outer, Rest &&... rest)
Creates a pointer to a nested exception from an inner exception and an outer exception.