You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
80 lines
2.4 KiB
80 lines
2.4 KiB
// Boost system_error.hpp --------------------------------------------------// |
|
|
|
// Copyright Beman Dawes 2006 |
|
|
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying |
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
|
|
|
#ifndef BOOST_SYSTEM_ERROR_HPP |
|
#define BOOST_SYSTEM_ERROR_HPP |
|
|
|
#include <string> |
|
#include <stdexcept> |
|
#include <cassert> |
|
#include <boost/system/error_code.hpp> |
|
|
|
namespace boost |
|
{ |
|
namespace system |
|
{ |
|
// class system_error ------------------------------------------------------------// |
|
|
|
class BOOST_SYMBOL_VISIBLE system_error : public std::runtime_error |
|
// BOOST_SYMBOL_VISIBLE is needed by GCC to ensure system_error thrown from a shared |
|
// library can be caught. See svn.boost.org/trac/boost/ticket/3697 |
|
{ |
|
public: |
|
system_error( error_code ec ) |
|
: std::runtime_error(""), m_error_code(ec) {} |
|
|
|
system_error( error_code ec, const std::string & what_arg ) |
|
: std::runtime_error(what_arg), m_error_code(ec) {} |
|
|
|
system_error( error_code ec, const char* what_arg ) |
|
: std::runtime_error(what_arg), m_error_code(ec) {} |
|
|
|
system_error( int ev, const error_category & ecat ) |
|
: std::runtime_error(""), m_error_code(ev,ecat) {} |
|
|
|
system_error( int ev, const error_category & ecat, |
|
const std::string & what_arg ) |
|
: std::runtime_error(what_arg), m_error_code(ev,ecat) {} |
|
|
|
system_error( int ev, const error_category & ecat, |
|
const char * what_arg ) |
|
: std::runtime_error(what_arg), m_error_code(ev,ecat) {} |
|
|
|
virtual ~system_error() throw() {} |
|
|
|
const error_code & code() const throw() { return m_error_code; } |
|
const char * what() const throw(); |
|
|
|
private: |
|
error_code m_error_code; |
|
mutable std::string m_what; |
|
}; |
|
|
|
// implementation ------------------------------------------------------// |
|
|
|
inline const char * system_error::what() const throw() |
|
// see http://www.boost.org/more/error_handling.html for lazy build rationale |
|
{ |
|
if ( m_what.empty() ) |
|
{ |
|
try |
|
{ |
|
m_what = this->std::runtime_error::what(); |
|
if ( !m_what.empty() ) m_what += ": "; |
|
m_what += m_error_code.message(); |
|
} |
|
catch (...) { return std::runtime_error::what(); } |
|
} |
|
return m_what.c_str(); |
|
} |
|
|
|
} // namespace system |
|
} // namespace boost |
|
|
|
#endif // BOOST_SYSTEM_ERROR_HPP |
|
|
|
|
|
|