boost/log/exceptions.hpp
/*
* Copyright Andrey Semashev 2007 - 2015.
* 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)
*/
/*!
* \file
* \author Andrey Semashev
* \date 31.10.2009
*
* The header contains exception classes declarations.
*/
#ifndef BOOST_LOG_EXCEPTIONS_HPP_INCLUDED_
#define BOOST_LOG_EXCEPTIONS_HPP_INCLUDED_
#include <cstddef>
#include <string>
#include <stdexcept>
#include <boost/type_index.hpp>
#include <boost/preprocessor/seq/enum.hpp>
#include <boost/system/error_code.hpp>
#include <boost/system/system_error.hpp>
#include <boost/log/detail/config.hpp>
#include <boost/log/attributes/attribute_name.hpp>
#include <boost/log/detail/header.hpp>
#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
namespace boost {
// Forward-declaration of an exception base class from Boost.Exception
#if defined(__GNUC__)
# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
# pragma GCC visibility push (default)
class exception;
# pragma GCC visibility pop
# else
class exception;
# endif
#else
class BOOST_SYMBOL_VISIBLE exception;
#endif
BOOST_LOG_OPEN_NAMESPACE
namespace aux {
//! Attaches attribute name exception information
BOOST_LOG_API void attach_attribute_name_info(exception& e, attribute_name const& name);
} // namespace aux
/*!
* \brief Base class for memory allocation errors
*
* Exceptions derived from this class indicate problems with memory allocation.
*/
class BOOST_LOG_API bad_alloc :
public std::bad_alloc
{
private:
std::string m_message;
public:
/*!
* Initializing constructor. Creates an exception with the specified error message.
*/
explicit bad_alloc(const char* descr);
/*!
* Initializing constructor. Creates an exception with the specified error message.
*/
explicit bad_alloc(std::string const& descr);
/*!
* Destructor
*/
~bad_alloc() throw();
/*!
* Error message accessor.
*/
const char* what() const throw();
#ifndef BOOST_LOG_DOXYGEN_PASS
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr);
#endif
};
/*!
* \brief The exception is used to indicate reaching a storage capacity limit
*/
class BOOST_LOG_API capacity_limit_reached :
public bad_alloc
{
public:
/*!
* Initializing constructor. Creates an exception with the specified error message.
*/
explicit capacity_limit_reached(const char* descr);
/*!
* Initializing constructor. Creates an exception with the specified error message.
*/
explicit capacity_limit_reached(std::string const& descr);
/*!
* Destructor
*/
~capacity_limit_reached() throw();
#ifndef BOOST_LOG_DOXYGEN_PASS
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr);
#endif
};
/*!
* \brief Base class for runtime exceptions from the logging library
*
* Exceptions derived from this class indicate a problem that may not directly
* be caused by the user's code that interacts with the library, such as
* errors caused by input data.
*/
class BOOST_LOG_API runtime_error :
public std::runtime_error
{
public:
/*!
* Initializing constructor. Creates an exception with the specified error message.
*/
explicit runtime_error(std::string const& descr);
/*!
* Destructor
*/
~runtime_error() throw();
};
/*!
* \brief Exception class that is used to indicate errors of missing values
*/
class BOOST_LOG_API missing_value :
public runtime_error
{
public:
/*!
* Default constructor. Creates an exception with the default error message.
*/
missing_value();
/*!
* Initializing constructor. Creates an exception with the specified error message.
*/
explicit missing_value(std::string const& descr);
/*!
* Destructor
*/
~missing_value() throw();
#ifndef BOOST_LOG_DOXYGEN_PASS
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr, attribute_name const& name);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name);
#endif
};
/*!
* \brief Exception class that is used to indicate errors of incorrect type of an object
*/
class BOOST_LOG_API invalid_type :
public runtime_error
{
public:
/*!
* Default constructor. Creates an exception with the default error message.
*/
invalid_type();
/*!
* Initializing constructor. Creates an exception with the specified error message.
*/
explicit invalid_type(std::string const& descr);
/*!
* Destructor
*/
~invalid_type() throw();
#ifndef BOOST_LOG_DOXYGEN_PASS
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr, attribute_name const& name);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr, typeindex::type_index const& type);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr, typeindex::type_index const& type);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr, attribute_name const& name, typeindex::type_index const& type);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name, typeindex::type_index const& type);
#endif
};
/*!
* \brief Exception class that is used to indicate errors of incorrect value of an object
*/
class BOOST_LOG_API invalid_value :
public runtime_error
{
public:
/*!
* Default constructor. Creates an exception with the default error message.
*/
invalid_value();
/*!
* Initializing constructor. Creates an exception with the specified error message.
*/
explicit invalid_value(std::string const& descr);
/*!
* Destructor
*/
~invalid_value() throw();
#ifndef BOOST_LOG_DOXYGEN_PASS
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr);
#endif
};
/*!
* \brief Exception class that is used to indicate parsing errors
*/
class BOOST_LOG_API parse_error :
public runtime_error
{
public:
/*!
* Default constructor. Creates an exception with the default error message.
*/
parse_error();
/*!
* Initializing constructor. Creates an exception with the specified error message.
*/
explicit parse_error(std::string const& descr);
/*!
* Destructor
*/
~parse_error() throw();
#ifndef BOOST_LOG_DOXYGEN_PASS
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr, std::size_t content_line);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr, std::size_t content_line);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr, attribute_name const& name);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name);
#endif
};
/*!
* \brief Exception class that is used to indicate conversion errors
*/
class BOOST_LOG_API conversion_error :
public runtime_error
{
public:
/*!
* Default constructor. Creates an exception with the default error message.
*/
conversion_error();
/*!
* Initializing constructor. Creates an exception with the specified error message.
*/
explicit conversion_error(std::string const& descr);
/*!
* Destructor
*/
~conversion_error() throw();
#ifndef BOOST_LOG_DOXYGEN_PASS
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr);
#endif
};
/*!
* \brief Exception class that is used to indicate underlying OS API errors
*/
class BOOST_LOG_API system_error :
public boost::system::system_error
{
public:
/*!
* Initializing constructor. Creates an exception with the specified error message.
*/
system_error(boost::system::error_code code, std::string const& descr);
/*!
* Destructor
*/
~system_error() throw();
#ifndef BOOST_LOG_DOXYGEN_PASS
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr, int system_error_code);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr, int system_error_code);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr, boost::system::error_code code);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr, boost::system::error_code code);
#endif
};
/*!
* \brief Base class for logic exceptions from the logging library
*
* Exceptions derived from this class usually indicate errors on the user's side, such as
* incorrect library usage.
*/
class BOOST_LOG_API logic_error :
public std::logic_error
{
public:
/*!
* Initializing constructor. Creates an exception with the specified error message.
*/
explicit logic_error(std::string const& descr);
/*!
* Destructor
*/
~logic_error() throw();
#ifndef BOOST_LOG_DOXYGEN_PASS
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr);
#endif
};
/*!
* \brief Exception class that is used to indicate ODR violation
*/
class BOOST_LOG_API odr_violation :
public logic_error
{
public:
/*!
* Default constructor. Creates an exception with the default error message.
*/
odr_violation();
/*!
* Initializing constructor. Creates an exception with the specified error message.
*/
explicit odr_violation(std::string const& descr);
/*!
* Destructor
*/
~odr_violation() throw();
#ifndef BOOST_LOG_DOXYGEN_PASS
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr);
#endif
};
/*!
* \brief Exception class that is used to indicate invalid call sequence
*/
class BOOST_LOG_API unexpected_call :
public logic_error
{
public:
/*!
* Default constructor. Creates an exception with the default error message.
*/
unexpected_call();
/*!
* Initializing constructor. Creates an exception with the specified error message.
*/
explicit unexpected_call(std::string const& descr);
/*!
* Destructor
*/
~unexpected_call() throw();
#ifndef BOOST_LOG_DOXYGEN_PASS
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr);
#endif
};
/*!
* \brief Exception class that is used to indicate invalid library setup
*/
class BOOST_LOG_API setup_error :
public logic_error
{
public:
/*!
* Default constructor. Creates an exception with the default error message.
*/
setup_error();
/*!
* Initializing constructor. Creates an exception with the specified error message.
*/
explicit setup_error(std::string const& descr);
/*!
* Destructor
*/
~setup_error() throw();
#ifndef BOOST_LOG_DOXYGEN_PASS
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr);
#endif
};
/*!
* \brief Exception class that is used to indicate library limitation
*/
class BOOST_LOG_API limitation_error :
public logic_error
{
public:
/*!
* Default constructor. Creates an exception with the default error message.
*/
limitation_error();
/*!
* Initializing constructor. Creates an exception with the specified error message.
*/
explicit limitation_error(std::string const& descr);
/*!
* Destructor
*/
~limitation_error() throw();
#ifndef BOOST_LOG_DOXYGEN_PASS
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr);
static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr);
#endif
};
BOOST_LOG_CLOSE_NAMESPACE // namespace log
} // namespace boost
#ifndef BOOST_LOG_DOXYGEN_PASS
#define BOOST_LOG_THROW(ex)\
ex::throw_(__FILE__, static_cast< std::size_t >(__LINE__))
#define BOOST_LOG_THROW_DESCR(ex, descr)\
ex::throw_(__FILE__, static_cast< std::size_t >(__LINE__), descr)
#define BOOST_LOG_THROW_DESCR_PARAMS(ex, descr, params)\
ex::throw_(__FILE__, static_cast< std::size_t >(__LINE__), descr, BOOST_PP_SEQ_ENUM(params))
#endif // BOOST_LOG_DOXYGEN_PASS
#include <boost/log/detail/footer.hpp>
#endif // BOOST_LOG_EXCEPTIONS_HPP_INCLUDED_