Listing 1: The CommonExcep base class and the ExcepInfo class

class CommonExcep {
public:
   CommonExcep
      (const char* file,
       const char* method,
       const int   line,
       const char* errMsg   = "",
       const int   errCode  = 0,
       const char* subID    = "");

   virtual ~CommonExcep() {}

   virtual const char*   id()          const;
   const int             numEntries()  const;
   const ExcepInfo&      origExcep()   const;
   const ExcepInfo&      latestExcep() const;
   const ExcepInfoDeque& exceptions()  const;
   
   void    push(const char* file,
                const char* method,
                const int   line,
                const char* errMsg = "");

   void    importPrior(const CommonExcep& excep);

protected:
   CommonExcep(const char* id,
               const char* file,
               const char* method,
               const int   line,
               const char* errMsg,
               const int   errCode,
               const char* subID);

   ExcepInfoDeque   m_excepInfoDeque;
};

class ExcepInfo {
public:
   ExcepInfo(const char* id,
             const char* file,
             const char* method,
             const int   line,
             const char* errMsg,
             const int   errCode,
             const char* subID);

   const std::string& id()       const;
   const std::string& file()     const;
   const std::string& method()   const;
   const int          line()     const;
   const std::string& errMsg()   const;
   const int          errCode()  const;
   const std::string& subID()    const;

protected:
   std::string     m_id;
   std::string     m_file;
   std::string     m_method;
   int             m_line;
   std::string     m_errMsg;
   int             m_errCode;
   std::string     m_subID;
};    
— End of Listing —