fixing compile errors with some compilers

[SVN r55744]
This commit is contained in:
Emil Dotchevski
2009-08-23 22:34:19 +00:00
parent fa96125efb
commit 920ae71b00
3 changed files with 30 additions and 11 deletions

View File

@ -73,6 +73,20 @@ boost
return x.throw_line_!=-1 ? &x.throw_line_ : 0; return x.throw_line_!=-1 ? &x.throw_line_ : 0;
} }
}; };
template <class T,class R>
struct
get_error_info_return_type
{
typedef R * type;
};
template <class T,class R>
struct
get_error_info_return_type<T const,R>
{
typedef R const * type;
};
} }
#ifdef BOOST_NO_RTTI #ifdef BOOST_NO_RTTI
@ -93,17 +107,7 @@ boost
#else #else
template <class ErrorInfo,class E> template <class ErrorInfo,class E>
inline inline
typename ErrorInfo::value_type const * typename exception_detail::get_error_info_return_type<E,typename ErrorInfo::value_type>::type
get_error_info( E const & some_exception )
{
if( exception const * x = dynamic_cast<exception const *>(&some_exception) )
return exception_detail::get_info<ErrorInfo>::get(*x);
else
return 0;
}
template <class ErrorInfo,class E>
inline
typename ErrorInfo::value_type *
get_error_info( E & some_exception ) get_error_info( E & some_exception )
{ {
if( exception const * x = dynamic_cast<exception const *>(&some_exception) ) if( exception const * x = dynamic_cast<exception const *>(&some_exception) )

View File

@ -38,6 +38,7 @@ run no_exceptions_test.cpp : : : <exception-handling>off ;
run errinfos_test.cpp ; run errinfos_test.cpp ;
compile-fail exception_fail.cpp ; compile-fail exception_fail.cpp ;
compile-fail throw_exception_fail.cpp ; compile-fail throw_exception_fail.cpp ;
compile-fail error_info_const_fail.cpp ;
#headers #headers

View File

@ -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 <boost/exception/get_error_info.hpp>
typedef boost::error_info<struct foo_,int> foo;
void
test( boost::exception const * e )
{
++*boost::get_error_info<foo>(*e);
}