Chris@16: // Boost system_error.hpp --------------------------------------------------// Chris@16: Chris@16: // Copyright Beman Dawes 2006 Chris@16: Chris@16: // Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: #ifndef BOOST_SYSTEM_ERROR_HPP Chris@16: #define BOOST_SYSTEM_ERROR_HPP Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost Chris@16: { Chris@16: namespace system Chris@16: { Chris@16: // class system_error ------------------------------------------------------------// Chris@16: Chris@16: class BOOST_SYMBOL_VISIBLE system_error : public std::runtime_error Chris@16: // BOOST_SYMBOL_VISIBLE is needed by GCC to ensure system_error thrown from a shared Chris@16: // library can be caught. See svn.boost.org/trac/boost/ticket/3697 Chris@16: { Chris@16: public: Chris@16: system_error( error_code ec ) Chris@16: : std::runtime_error(""), m_error_code(ec) {} Chris@16: Chris@16: system_error( error_code ec, const std::string & what_arg ) Chris@16: : std::runtime_error(what_arg), m_error_code(ec) {} Chris@16: Chris@16: system_error( error_code ec, const char* what_arg ) Chris@16: : std::runtime_error(what_arg), m_error_code(ec) {} Chris@16: Chris@16: system_error( int ev, const error_category & ecat ) Chris@16: : std::runtime_error(""), m_error_code(ev,ecat) {} Chris@16: Chris@16: system_error( int ev, const error_category & ecat, Chris@16: const std::string & what_arg ) Chris@16: : std::runtime_error(what_arg), m_error_code(ev,ecat) {} Chris@16: Chris@16: system_error( int ev, const error_category & ecat, Chris@16: const char * what_arg ) Chris@16: : std::runtime_error(what_arg), m_error_code(ev,ecat) {} Chris@16: Chris@16: virtual ~system_error() throw() {} Chris@16: Chris@16: const error_code & code() const throw() { return m_error_code; } Chris@16: const char * what() const throw(); Chris@16: Chris@16: private: Chris@16: error_code m_error_code; Chris@16: mutable std::string m_what; Chris@16: }; Chris@16: Chris@16: // implementation ------------------------------------------------------// Chris@16: Chris@16: inline const char * system_error::what() const throw() Chris@16: // see http://www.boost.org/more/error_handling.html for lazy build rationale Chris@16: { Chris@16: if ( m_what.empty() ) Chris@16: { Chris@16: #ifndef BOOST_NO_EXCEPTIONS Chris@16: try Chris@16: #endif Chris@16: { Chris@16: m_what = this->std::runtime_error::what(); Chris@16: if ( !m_what.empty() ) m_what += ": "; Chris@16: m_what += m_error_code.message(); Chris@16: } Chris@16: #ifndef BOOST_NO_EXCEPTIONS Chris@16: catch (...) { return std::runtime_error::what(); } Chris@16: #endif Chris@16: } Chris@16: return m_what.c_str(); Chris@16: } Chris@16: Chris@16: } // namespace system Chris@16: } // namespace boost Chris@16: Chris@16: #endif // BOOST_SYSTEM_ERROR_HPP Chris@16: Chris@16: