Boost Exception

BOOST_THROW_EXCEPTION

#include <boost/throw_exception.hpp>

#if !defined( BOOST_EXCEPTION_DISABLE )
    #include <boost/exception/exception.hpp>
    #include <boost/current_function.hpp>
    #define BOOST_THROW_EXCEPTION(x)\
        ::boost::throw_exception( ::boost::enable_error_info(x) <<\
        ::boost::throw_function(BOOST_CURRENT_FUNCTION) <<\
        ::boost::throw_file(__FILE__) <<\
        ::boost::throw_line((int)__LINE__) )
#else
    #define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x)
#endif

This macro takes an exception object, records BOOST_CURRENT_FUNCTION, __FILE__ and __LINE__ in it, and forwards it to throw_exception. To recover this information at the catch site, use get_error_info; the information is also included in the message returned by diagnostic_information.