mirror of
https://github.com/boostorg/throw_exception.git
synced 2025-07-16 22:12:04 +02:00
boost exception
[SVN r43485]
This commit is contained in:
committed by
Peter Dimov
parent
4fd93c01b5
commit
db3574bc9d
54
doc/throw_exception.html
Normal file
54
doc/throw_exception.html
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
|
||||||
|
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
|
||||||
|
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
|
||||||
|
<title>throw_exception</title>
|
||||||
|
<link href='reno.css' type='text/css' rel='stylesheet'/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="body-0">
|
||||||
|
<div class="body-1">
|
||||||
|
<div class="body-2">
|
||||||
|
<div>
|
||||||
|
<div id="boost_logo">
|
||||||
|
<a href="http://www.boost.org"><img style="border:0" src="http://www.boost.org/boost.png" alt="Boost" width="277" height="86"/></a>
|
||||||
|
</div>
|
||||||
|
<h1>Boost Exception</h1>
|
||||||
|
</div>
|
||||||
|
<div class="RenoIncludeDIV"><h3>throw_exception()</h3>
|
||||||
|
<div class="RenoIncludeDIV"><p><tt>#include <<span class="RenoLink"><a href="throw_exception_hpp.html">boost/throw_exception.hpp</a></span>></tt></p>
|
||||||
|
<pre>namespace
|
||||||
|
boost
|
||||||
|
{
|
||||||
|
<span class="RenoIncludeSPAN">#ifdef BOOST_NO_EXCEPTIONS
|
||||||
|
void <span class="RenoLink"><a href="throw_exception.html">throw_exception</a></span>( std::exception const & e ); // user defined
|
||||||
|
#else
|
||||||
|
template <class E>
|
||||||
|
void <span class="RenoLink"><a href="throw_exception.html">throw_exception</a></span>( E const & e );
|
||||||
|
#endif</span>
|
||||||
|
}</pre>
|
||||||
|
</div><h4>Effects:</h4>
|
||||||
|
<div><ul><li> If <tt>BOOST_NO_EXCEPTIONS</tt> is not defined, <tt>boost::<span class="RenoLink"><a href="throw_exception.html">throw_exception</a></span>(e)</tt> is equivalent to <tt>throw boost::<span class="RenoLink"><a href="enable_exception_cloning.html">enable_exception_cloning</a></span>(boost::<span class="RenoLink"><a href="enable_error_info.html">enable_error_info</a></span>(e))</tt>, unless <tt>BOOST_EXCEPTION_DISABLE</tt> is defined, in which case <tt>boost::<span class="RenoLink"><a href="throw_exception.html">throw_exception</a></span>(e)</tt> is equivalent to <tt>throw e;</tt></li>
|
||||||
|
<li> If <tt>BOOST_NO_EXCEPTIONS</tt> is defined, the function is left undefined, and the user is expected to supply an appropriate definition. Callers of <tt>throw_exception</tt> are allowed to assume that the function never returns; therefore, if the user-defined <tt>throw_exception</tt> returns, the behavior is undefined.</li>
|
||||||
|
</ul></div>
|
||||||
|
</div><h3>See also:</h3>
|
||||||
|
<div class="RenoPageList"><a href="boost-exception.html">Boost Exception<br/>
|
||||||
|
</a><a href="enable_exception_cloning.html">enable_exception_cloning<br/>
|
||||||
|
</a><a href="cloning.html">Tutorial: Transporting of Exceptions between Threads<br/>
|
||||||
|
</a></div>
|
||||||
|
<div id="footer">
|
||||||
|
<p> </p>
|
||||||
|
<hr/>
|
||||||
|
<p>
|
||||||
|
<a class="logo" href="http://jigsaw.w3.org/css-validator/validator?uri=http://revergestudios.com/boost-exception/reno.css"><img class="logo_pic" src="valid-css.png" alt="Valid CSS" height="31" width="88"/></a>
|
||||||
|
<a class="logo" href="http://validator.w3.org/check?uri=referer"><img class="logo_pic" src="valid-xhtml.png" alt="Valid XHTML 1.0" height="31" width="88"/></a>
|
||||||
|
<small>Copyright (c) 2006-2008 by Emil Dotchevski and Reverge Studios, Inc.<br/>
|
||||||
|
Distributed under the <a href="http://www.boost.org/LICENSE_1_0.txt">Boost Software License, Version 1.0</a>.</small>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
90
include/boost/exception/exception.hpp
Normal file
90
include/boost/exception/exception.hpp
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
//Copyright (c) 2006-2008 Emil Dotchevski and Reverge Studios, Inc.
|
||||||
|
|
||||||
|
//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 UUID_274DA366004E11DCB1DDFE2E56D89593
|
||||||
|
#define UUID_274DA366004E11DCB1DDFE2E56D89593
|
||||||
|
|
||||||
|
#include <boost/exception/detail/counted_base.hpp>
|
||||||
|
#include <boost/intrusive_ptr.hpp>
|
||||||
|
#include <typeinfo>
|
||||||
|
|
||||||
|
namespace
|
||||||
|
boost
|
||||||
|
{
|
||||||
|
template <class T>
|
||||||
|
class shared_ptr;
|
||||||
|
|
||||||
|
namespace
|
||||||
|
exception_detail
|
||||||
|
{
|
||||||
|
class error_info_base;
|
||||||
|
|
||||||
|
struct
|
||||||
|
error_info_container:
|
||||||
|
public exception_detail::counted_base
|
||||||
|
{
|
||||||
|
virtual char const * what( std::type_info const & ) const = 0;
|
||||||
|
virtual shared_ptr<error_info_base const> get( std::type_info const & ) const = 0;
|
||||||
|
virtual void set( shared_ptr<error_info_base const> const & ) = 0;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Tag,class T>
|
||||||
|
class error_info;
|
||||||
|
|
||||||
|
template <class E,class Tag,class T>
|
||||||
|
E const & operator<<( E const &, error_info<Tag,T> const & );
|
||||||
|
|
||||||
|
template <class ErrorInfo,class E>
|
||||||
|
shared_ptr<typename ErrorInfo::value_type const> get_error_info( E const & );
|
||||||
|
|
||||||
|
class
|
||||||
|
exception
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual ~exception() throw()=0;
|
||||||
|
virtual char const * what() const throw();
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
shared_ptr<exception_detail::error_info_base const> get( std::type_info const & ) const;
|
||||||
|
void set( shared_ptr<exception_detail::error_info_base const> const & ) const;
|
||||||
|
|
||||||
|
template <class E,class Tag,class T>
|
||||||
|
friend E const & operator<<( E const &, error_info<Tag,T> const & );
|
||||||
|
|
||||||
|
template <class ErrorInfo,class E>
|
||||||
|
friend shared_ptr<typename ErrorInfo::value_type const> get_error_info( E const & );
|
||||||
|
|
||||||
|
intrusive_ptr<exception_detail::error_info_container> mutable data_;
|
||||||
|
};
|
||||||
|
|
||||||
|
inline
|
||||||
|
exception::
|
||||||
|
~exception() throw()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
char const *
|
||||||
|
exception::
|
||||||
|
what() const throw()
|
||||||
|
{
|
||||||
|
if( data_ )
|
||||||
|
try
|
||||||
|
{
|
||||||
|
char const * w = data_->what(typeid(*this));
|
||||||
|
BOOST_ASSERT(0!=w);
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
catch(...)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
return typeid(*this).name();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
Reference in New Issue
Block a user