From 98ff58cf4624dc32e9faed8292ca74f524fa5fd0 Mon Sep 17 00:00:00 2001 From: Emil Dotchevski Date: Fri, 2 May 2008 20:40:39 +0000 Subject: [PATCH] throw_exception() now ensures that the exception type passed to it derives publicly from std::exception. [SVN r45041] --- include/boost/throw_exception.hpp | 13 ++++++++++--- test/throw_exception_fail.cpp | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 test/throw_exception_fail.cpp diff --git a/include/boost/throw_exception.hpp b/include/boost/throw_exception.hpp index 86dbcce..06194b8 100644 --- a/include/boost/throw_exception.hpp +++ b/include/boost/throw_exception.hpp @@ -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 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 diff --git a/test/throw_exception_fail.cpp b/test/throw_exception_fail.cpp new file mode 100644 index 0000000..343efd1 --- /dev/null +++ b/test/throw_exception_fail.cpp @@ -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 + +struct +my_exception + { + }; + +void +tester() + { + //Must not compile, throw_exception requires exception types to derive std::exception. + boost::throw_exception(my_exception()); + }