All Classes Files Functions Variables Typedefs Pages
LuminaException.hpp
1 #pragma once
2 
3 #include <sstream>
4 #include <stdexcept>
5 
6 namespace lumina {
7 
8 class LuminaException : public std::exception {
9 public:
10  template <typename... Ts> LuminaException(Ts...);
11  LuminaException(const LuminaException& copy);
12  const char* what() const noexcept;
13 
14 private:
15  std::stringstream m_what;
16 
17  template <typename T, typename... Ts> void append(T, Ts...);
18  template <typename T> void append(T);
19 };
20 
21 
22 #define X(name_, base_)\
23  class name_ : public base_ {\
24  using base_::base_;\
25  };
26 
27 X(NotReadyEx, LuminaException)
28 X(LogicEx, LuminaException)
29 X(InvalidArgEx, LuminaException)
30 X(CriticalEx, LuminaException)
31 X(IOEx, LuminaException)
32 X(OutOfRangeEx, LuminaException)
33 
34 #undef X
35 
36 } // namespace lumina
37 
38 #include "LuminaException.tpp"
Definition: LuminaException.hpp:8