throw_exception() now ensures that the exception type passed to it derives publicly from std::exception.

[SVN r45041]
This commit is contained in:
Emil Dotchevski
2008-05-02 20:40:39 +00:00
committed by Peter Dimov
parent 7ad5ceee77
commit 98ff58cf46
2 changed files with 28 additions and 3 deletions

View File

@ -11,10 +11,11 @@
// boost/throw_exception.hpp
//
// Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
// Copyright (c) 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)
// 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
//
@ -39,8 +40,14 @@ void throw_exception(std::exception const & e); // user defined
#else
inline void throw_exception_assert_compatibility( std::exception const & ) { }
template<class E> inline void throw_exception(E const & e)
{
//All boost exceptions are required to derive 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

View File

@ -0,0 +1,18 @@
//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)
#include <boost/throw_exception.hpp>
struct
my_exception
{
};
void
tester()
{
//Must not compile, throw_exception requires exception types to derive std::exception.
boost::throw_exception(my_exception());
}