10 #include <boost/format.hpp> 
   36 #define BELLE2_DEFINE_EXCEPTION(ClassName, Message) \ 
   37   class ClassName : public std::runtime_error { \ 
   39     ClassName(): std::runtime_error(""), m_format(Message) { } \
 
   40     ~ClassName() noexcept {} \
 
   41     virtual const char * what() const noexcept override { \
 
   42       m_finalStr = m_format.str();\
 
   43       return m_finalStr.c_str();\
 
   45     template <class T> ClassName& operator<<(const T& param) {\
 
   50     boost::format m_format;\
 
   51     mutable std::string m_finalStr;\
 
Abstract base class for different kinds of events.