//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_0C5D492E909711DCB658AD4556D89593 #define UUID_0C5D492E909711DCB658AD4556D89593 #include #include #include #include namespace boost { namespace exception_detail { template struct error_info_injector: public T, public exception { explicit error_info_injector( T const & x ): T(x) { } ~error_info_injector() throw() { } char const * what() const throw() { return T::what(); } char const * diagnostic_information() const throw() { return boost::exception::_diagnostic_information(T::what()); } }; struct large_size { char c[256]; }; large_size dispatch( exception * ); struct small_size { }; small_size dispatch( void * ); template struct enable_error_info_helper; template struct enable_error_info_helper { typedef T type; }; template struct enable_error_info_helper { typedef error_info_injector type; }; #if BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x582)) template struct sizeof_dispatch { BOOST_STATIC_CONSTANT(int, value = sizeof(dispatch((T*)0)) ); }; template struct enable_error_info_return_type { typedef typename enable_error_info_helper::value>::type type; }; #else template struct enable_error_info_return_type { typedef typename enable_error_info_helper::type type; }; #endif } template #if !BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x582)) typename #endif exception_detail::enable_error_info_return_type::type enable_error_info( T const & x ) { return #if !BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x582)) typename #endif exception_detail::enable_error_info_return_type::type(x); } } #endif