updating from trunk.

[SVN r60338]
This commit is contained in:
Emil Dotchevski
2010-03-08 08:18:25 +00:00
committed by Peter Dimov
parent 89e6b4ef35
commit a53446874b
2 changed files with 76 additions and 46 deletions

View File

@ -132,18 +132,6 @@ boost
}
};
template <class E,class Tag,class T>
E const & operator<<( E const &, error_info<Tag,T> const & );
template <class E>
E const & operator<<( E const &, throw_function const & );
template <class E>
E const & operator<<( E const &, throw_file const & );
template <class E>
E const & operator<<( E const &, throw_line const & );
class exception;
template <class>
@ -163,6 +151,7 @@ boost
virtual void set( shared_ptr<error_info_base> const &, type_info_ const & ) = 0;
virtual void add_ref() const = 0;
virtual void release() const = 0;
virtual refcount_ptr<exception_detail::error_info_container> clone() const = 0;
protected:
@ -184,6 +173,20 @@ boost
struct get_info<throw_line>;
char const * get_diagnostic_information( exception const &, char const * );
void copy_boost_exception( exception *, exception const * );
template <class E,class Tag,class T>
E const & set_info( E const &, error_info<Tag,T> const & );
template <class E>
E const & set_info( E const &, throw_function const & );
template <class E>
E const & set_info( E const &, throw_file const & );
template <class E>
E const & set_info( E const &, throw_line const & );
}
class
@ -216,30 +219,31 @@ boost
#endif
;
#if defined(__MWERKS__) && __MWERKS__<=0x3207
#if (defined(__MWERKS__) && __MWERKS__<=0x3207) || (defined(_MSC_VER) && _MSC_VER<=1310)
public:
#else
private:
template <class E>
friend E const & operator<<( E const &, throw_function const & );
friend E const & exception_detail::set_info( E const &, throw_function const & );
template <class E>
friend E const & operator<<( E const &, throw_file const & );
friend E const & exception_detail::set_info( E const &, throw_file const & );
template <class E>
friend E const & operator<<( E const &, throw_line const & );
friend char const * exception_detail::get_diagnostic_information( exception const &, char const * );
friend E const & exception_detail::set_info( E const &, throw_line const & );
template <class E,class Tag,class T>
friend E const & operator<<( E const &, error_info<Tag,T> const & );
friend E const & exception_detail::set_info( E const &, error_info<Tag,T> const & );
friend char const * exception_detail::get_diagnostic_information( exception const &, char const * );
template <class>
friend struct exception_detail::get_info;
friend struct exception_detail::get_info<throw_function>;
friend struct exception_detail::get_info<throw_file>;
friend struct exception_detail::get_info<throw_line>;
friend void exception_detail::copy_boost_exception( exception *, exception const * );
#endif
mutable exception_detail::refcount_ptr<exception_detail::error_info_container> data_;
mutable char const * throw_function_;
@ -253,28 +257,32 @@ boost
{
}
template <class E>
E const &
operator<<( E const & x, throw_function const & y )
namespace
exception_detail
{
x.throw_function_=y.v_;
return x;
}
template <class E>
E const &
set_info( E const & x, throw_function const & y )
{
x.throw_function_=y.v_;
return x;
}
template <class E>
E const &
operator<<( E const & x, throw_file const & y )
{
x.throw_file_=y.v_;
return x;
}
template <class E>
E const &
set_info( E const & x, throw_file const & y )
{
x.throw_file_=y.v_;
return x;
}
template <class E>
E const &
operator<<( E const & x, throw_line const & y )
{
x.throw_line_=y.v_;
return x;
template <class E>
E const &
set_info( E const & x, throw_line const & y )
{
x.throw_line_=y.v_;
return x;
}
}
////////////////////////////////////////////////////////////////////////
@ -300,10 +308,10 @@ boost
};
struct large_size { char c[256]; };
large_size dispatch( exception * );
large_size dispatch_boost_exception( exception const * );
struct small_size { };
small_size dispatch( void * );
small_size dispatch_boost_exception( void const * );
template <class,int>
struct enable_error_info_helper;
@ -326,7 +334,7 @@ boost
struct
enable_error_info_return_type
{
typedef typename enable_error_info_helper<T,sizeof(exception_detail::dispatch((T*)0))>::type type;
typedef typename enable_error_info_helper<T,sizeof(exception_detail::dispatch_boost_exception((T*)0))>::type type;
};
}
@ -363,7 +371,13 @@ boost
void
copy_boost_exception( exception * a, exception const * b )
{
*a = *b;
refcount_ptr<error_info_container> data;
if( error_info_container * d=b->data_.get() )
data = d->clone();
a->throw_file_ = b->throw_file_;
a->throw_line_ = b->throw_line_;
a->throw_function_ = b->throw_function_;
a->data_ = data;
}
inline