1 //Copyright (c) 2006-2008 Emil Dotchevski and Reverge Studios, Inc.
3 //Distributed under the Boost Software License, Version 1.0. (See accompanying
4 //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 #ifndef UUID_78CC85B2914F11DC8F47B48E55D89593
7 #define UUID_78CC85B2914F11DC8F47B48E55D89593
9 #include <boost/exception/exception.hpp>
10 #include <boost/exception/detail/cloning_base.hpp>
11 #include <boost/detail/atomic_count.hpp>
12 #include <boost/assert.hpp>
27 virtual void rethrow() const=0;
53 clone_base * make_clone( T const & );
64 clone_impl( T const & x ):
67 if( boost::exception * be1=dynamic_cast<boost::exception *>(this) )
68 if( boost::exception const * be2=dynamic_cast<boost::exception const *>(&x) )
77 return make_clone<T>(*this);
90 exception_clone( T const & x ):
94 if( boost::exception * be1=dynamic_cast<boost::exception *>(this) )
95 if( boost::exception const * be2=dynamic_cast<boost::exception const *>(&x) )
101 detail::atomic_count mutable count_;
119 throw clone_impl<T>(*this);
126 make_clone( T const & x )
130 return new exception_clone<T>(x);
135 static bad_alloc_impl bad_alloc;
149 exception_detail::clone_impl<T>
150 enable_current_exception( T const & x )
152 return exception_detail::clone_impl<T>(x);