//// Copyright 2019 Peter Dimov Distributed under the Boost Software License, Version 1.0. http://www.boost.org/LICENSE_1_0.txt //// [#reference] # Reference :toc: :toc-title: :idprefix: [#synopsis] ## Synopsis ``` #include #include #include namespace boost { #if defined( BOOST_NO_EXCEPTIONS ) BOOST_NORETURN void throw_exception( std::exception const & e ); // user defined BOOST_NORETURN void throw_exception( std::exception const & e, boost::source_location const & loc ); // user defined #else template BOOST_NORETURN void throw_exception( E const & e ); template BOOST_NORETURN void throw_exception( E const & e, boost::source_location const & loc ); #endif } // namespace boost #define BOOST_THROW_EXCEPTION(x) \ ::boost::throw_exception(x, BOOST_CURRENT_LOCATION) ``` ## throw_exception ``` #if defined( BOOST_NO_EXCEPTIONS ) BOOST_NORETURN void throw_exception( std::exception const & e ); // user defined #else template BOOST_NORETURN void throw_exception( E const & e ); #endif ``` Requires: :: `E` must have `std::exception` as a public and unambiguous base class. Effects: :: * When exceptions aren't available, the function is declared, but not defined. The user is expected to supply an appropriate definition. * Otherwise, if `BOOST_EXCEPTION_DISABLE` is defined, the function throws `e`. * Otherwise, the function throws an object of a type derived from `E`, derived from `boost::exception`, if `E` doesn't already derive from it, and containing the necessary support for `boost::exception_ptr`. ``` #if defined( BOOST_NO_EXCEPTIONS ) BOOST_NORETURN void throw_exception( std::exception const & e, boost::source_location const & loc ); // user defined #else template BOOST_NORETURN void throw_exception( E const & e, boost::source_location const & loc ); #endif ``` Requires: :: `E` must have `std::exception` as a public and unambiguous base class. Effects: :: * When exceptions aren't available, the function is declared, but not defined. The user is expected to supply an appropriate definition. * Otherwise, if `BOOST_EXCEPTION_DISABLE` is defined, the function throws `e`. * Otherwise, the function throws an object of a type derived from `E`, derived from `boost::exception`, if `E` doesn't already derive from it, and containing the necessary support for `boost::exception_ptr`. The `boost::exception` base class is initialized to contain the source location `loc`.