diff options
Diffstat (limited to 'cutl/details/boost/throw_exception.hpp')
-rw-r--r-- | cutl/details/boost/throw_exception.hpp | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/cutl/details/boost/throw_exception.hpp b/cutl/details/boost/throw_exception.hpp new file mode 100644 index 0000000..54efd83 --- /dev/null +++ b/cutl/details/boost/throw_exception.hpp @@ -0,0 +1,91 @@ +#ifndef BOOST_THROW_EXCEPTION_HPP_INCLUDED +#define BOOST_THROW_EXCEPTION_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/throw_exception.hpp +// +// Copyright (c) 2002 Peter Dimov and Multi Media Ltd. +// Copyright (c) 2008-2009 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) +// +// http://www.boost.org/libs/utility/throw_exception.html +// + +#include <cutl/details/boost/exception/detail/attribute_noreturn.hpp> +#include <cutl/details/boost/detail/workaround.hpp> +#include <cutl/details/boost/config.hpp> +#include <exception> + +#if !defined( BOOST_EXCEPTION_DISABLE ) && defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x593) ) +# define BOOST_EXCEPTION_DISABLE +#endif + +#if !defined( BOOST_EXCEPTION_DISABLE ) && defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, < 1310 ) +# define BOOST_EXCEPTION_DISABLE +#endif + +#if !defined( BOOST_EXCEPTION_DISABLE ) +# include <cutl/details/boost/exception/exception.hpp> +# include <cutl/details/boost/current_function.hpp> +# define BOOST_THROW_EXCEPTION(x) ::cutl_details_boost::exception_detail::throw_exception_(x,BOOST_CURRENT_FUNCTION,__FILE__,__LINE__) +#else +# define BOOST_THROW_EXCEPTION(x) ::cutl_details_boost::throw_exception(x) +#endif + +namespace cutl_details_boost +{ +#ifdef BOOST_NO_EXCEPTIONS + +void throw_exception( std::exception const & e ); // user defined + +#else + +inline void throw_exception_assert_compatibility( std::exception const & ) { } + +template<class E> BOOST_ATTRIBUTE_NORETURN inline void throw_exception( E const & e ) +{ + //All boost exceptions are required to derive from std::exception, + //to ensure compatibility with BOOST_NO_EXCEPTIONS. + throw_exception_assert_compatibility(e); + +#ifndef BOOST_EXCEPTION_DISABLE + throw enable_current_exception(enable_error_info(e)); +#else + throw e; +#endif +} + +#endif + +#if !defined( BOOST_EXCEPTION_DISABLE ) + namespace + exception_detail + { + template <class E> + BOOST_ATTRIBUTE_NORETURN + void + throw_exception_( E const & x, char const * current_function, char const * file, int line ) + { + cutl_details_boost::throw_exception( + set_info( + set_info( + set_info( + cutl_details_boost::enable_error_info(x), + throw_function(current_function)), + throw_file(file)), + throw_line(line))); + } + } +#endif +} // namespace cutl_details_boost + +#endif // #ifndef BOOST_THROW_EXCEPTION_HPP_INCLUDED |