diff --git a/include/boost/exception/get_error_info.hpp b/include/boost/exception/get_error_info.hpp index 0901f52..640a612 100644 --- a/include/boost/exception/get_error_info.hpp +++ b/include/boost/exception/get_error_info.hpp @@ -73,6 +73,20 @@ boost return x.throw_line_!=-1 ? &x.throw_line_ : 0; } }; + + template + struct + get_error_info_return_type + { + typedef R * type; + }; + + template + struct + get_error_info_return_type + { + typedef R const * type; + }; } #ifdef BOOST_NO_RTTI @@ -93,17 +107,7 @@ boost #else template inline - typename ErrorInfo::value_type const * - get_error_info( E const & some_exception ) - { - if( exception const * x = dynamic_cast(&some_exception) ) - return exception_detail::get_info::get(*x); - else - return 0; - } - template - inline - typename ErrorInfo::value_type * + typename exception_detail::get_error_info_return_type::type get_error_info( E & some_exception ) { if( exception const * x = dynamic_cast(&some_exception) ) diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 23d38e7..43edeef 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -38,6 +38,7 @@ run no_exceptions_test.cpp : : : off ; run errinfos_test.cpp ; compile-fail exception_fail.cpp ; compile-fail throw_exception_fail.cpp ; +compile-fail error_info_const_fail.cpp ; #headers diff --git a/test/error_info_const_fail.cpp b/test/error_info_const_fail.cpp new file mode 100644 index 0000000..6612dba --- /dev/null +++ b/test/error_info_const_fail.cpp @@ -0,0 +1,14 @@ +//Copyright (c) 2006-2009 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 + +typedef boost::error_info foo; + +void +test( boost::exception const * e ) + { + ++*boost::get_error_info(*e); + }