Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r83354 - in branches/release: boost/exception boost/exception/detail libs/exception/doc libs/exception/test
From: emil_at_[hidden]
Date: 2013-03-07 21:01:47


Author: emildotchevski
Date: 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
New Revision: 83354
URL: http://svn.boost.org/trac/boost/changeset/83354

Log:
Merging long-standing changes from Trunk, including the slightly more sophisticated handling of the to_string conversion done in boost::diagnostic_information.
Removed:
   branches/release/libs/exception/doc/boost_exception_hpp.html
Text files modified:
   branches/release/boost/exception/all.hpp | 2
   branches/release/boost/exception/current_exception_cast.hpp | 2
   branches/release/boost/exception/detail/error_info_impl.hpp | 8 +--
   branches/release/boost/exception/detail/exception_ptr.hpp | 6 +-
   branches/release/boost/exception/detail/is_output_streamable.hpp | 2
   branches/release/boost/exception/detail/object_hex_dump.hpp | 2
   branches/release/boost/exception/detail/type_info.hpp | 2
   branches/release/boost/exception/diagnostic_information.hpp | 29 ++++++++-------
   branches/release/boost/exception/errinfo_errno.hpp | 2
   branches/release/boost/exception/exception.hpp | 2
   branches/release/boost/exception/get_error_info.hpp | 2
   branches/release/boost/exception/info.hpp | 25 ++++++-------
   branches/release/boost/exception/info_tuple.hpp | 2
   branches/release/boost/exception/to_string.hpp | 7 +++
   branches/release/boost/exception/to_string_stub.hpp | 10 ++++
   branches/release/libs/exception/doc/BOOST_THROW_EXCEPTION.html | 6 +-
   branches/release/libs/exception/doc/boost_exception_all_hpp.html | 2
   branches/release/libs/exception/doc/boost_exception_diagnostic_information_hpp.html | 6 +-
   branches/release/libs/exception/doc/boost_exception_get_error_info_hpp.html | 4 +-
   branches/release/libs/exception/doc/boost_throw_exception_hpp.html | 2
   branches/release/libs/exception/doc/configuration_macros.html | 4 +
   branches/release/libs/exception/doc/current_exception_diagnostic_information.html | 2
   branches/release/libs/exception/doc/diagnostic_information.html | 31 ++++++----------
   branches/release/libs/exception/doc/diagnostic_information_what.html | 2
   branches/release/libs/exception/doc/enable_current_exception.html | 2
   branches/release/libs/exception/doc/enable_error_info.html | 2
   branches/release/libs/exception/doc/exception.html | 2
   branches/release/libs/exception/doc/exception_ptr.html | 2
   branches/release/libs/exception/doc/frequently_asked_questions.html | 73 ++++++++++++++++-----------------------
   branches/release/libs/exception/doc/get_error_info.html | 6 +-
   branches/release/libs/exception/doc/synopsis.html | 8 ++--
   branches/release/libs/exception/doc/throw_exception.html | 15 ++++---
   branches/release/libs/exception/test/Jamfile.v2 | 6 +-
   branches/release/libs/exception/test/diagnostic_information_test.cpp | 5 --
   branches/release/libs/exception/test/error_info_test.cpp | 41 +++++++++++++++++++---
   branches/release/libs/exception/test/exception_ptr_test.cpp | 13 ++++--
   36 files changed, 180 insertions(+), 157 deletions(-)

Modified: branches/release/boost/exception/all.hpp
==============================================================================
--- branches/release/boost/exception/all.hpp (original)
+++ branches/release/boost/exception/all.hpp 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -5,7 +5,7 @@
 
 #ifndef UUID_316FDA946C0D11DEA9CBAE5255D89593
 #define UUID_316FDA946C0D11DEA9CBAE5255D89593
-#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
 #pragma GCC system_header
 #endif
 #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)

Modified: branches/release/boost/exception/current_exception_cast.hpp
==============================================================================
--- branches/release/boost/exception/current_exception_cast.hpp (original)
+++ branches/release/boost/exception/current_exception_cast.hpp 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -5,7 +5,7 @@
 
 #ifndef UUID_7E83C166200811DE885E826156D89593
 #define UUID_7E83C166200811DE885E826156D89593
-#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
 #pragma GCC system_header
 #endif
 #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)

Modified: branches/release/boost/exception/detail/error_info_impl.hpp
==============================================================================
--- branches/release/boost/exception/detail/error_info_impl.hpp (original)
+++ branches/release/boost/exception/detail/error_info_impl.hpp 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -5,7 +5,7 @@
 
 #ifndef UUID_CE6983AC753411DDA764247956D89593
 #define UUID_CE6983AC753411DDA764247956D89593
-#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
 #pragma GCC system_header
 #endif
 #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
@@ -25,8 +25,7 @@
             {
             public:
 
- virtual std::string tag_typeid_name() const = 0;
- virtual std::string value_as_string() const = 0;
+ virtual std::string name_value_string() const = 0;
 
             protected:
 
@@ -63,8 +62,7 @@
 
         private:
 
- std::string tag_typeid_name() const;
- std::string value_as_string() const;
+ std::string name_value_string() const;
 
         value_type value_;
         };

Modified: branches/release/boost/exception/detail/exception_ptr.hpp
==============================================================================
--- branches/release/boost/exception/detail/exception_ptr.hpp (original)
+++ branches/release/boost/exception/detail/exception_ptr.hpp 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -5,7 +5,7 @@
 
 #ifndef UUID_618474C2DE1511DEB74A388C56D89593
 #define UUID_618474C2DE1511DEB74A388C56D89593
-#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
 #pragma GCC system_header
 #endif
 #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
@@ -467,7 +467,7 @@
 
     inline
     std::string
- diagnostic_information( exception_ptr const & p )
+ diagnostic_information( exception_ptr const & p, bool verbose=true )
         {
         if( p )
             try
@@ -477,7 +477,7 @@
             catch(
             ... )
                 {
- return current_exception_diagnostic_information();
+ return current_exception_diagnostic_information(verbose);
                 }
         return "<empty>";
         }

Modified: branches/release/boost/exception/detail/is_output_streamable.hpp
==============================================================================
--- branches/release/boost/exception/detail/is_output_streamable.hpp (original)
+++ branches/release/boost/exception/detail/is_output_streamable.hpp 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -5,7 +5,7 @@
 
 #ifndef UUID_898984B4076411DD973EDFA055D89593
 #define UUID_898984B4076411DD973EDFA055D89593
-#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
 #pragma GCC system_header
 #endif
 #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)

Modified: branches/release/boost/exception/detail/object_hex_dump.hpp
==============================================================================
--- branches/release/boost/exception/detail/object_hex_dump.hpp (original)
+++ branches/release/boost/exception/detail/object_hex_dump.hpp 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -5,7 +5,7 @@
 
 #ifndef UUID_6F463AC838DF11DDA3E6909F56D89593
 #define UUID_6F463AC838DF11DDA3E6909F56D89593
-#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
 #pragma GCC system_header
 #endif
 #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)

Modified: branches/release/boost/exception/detail/type_info.hpp
==============================================================================
--- branches/release/boost/exception/detail/type_info.hpp (original)
+++ branches/release/boost/exception/detail/type_info.hpp 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -5,7 +5,7 @@
 
 #ifndef UUID_C3E1741C754311DDB2834CCA55D89593
 #define UUID_C3E1741C754311DDB2834CCA55D89593
-#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
 #pragma GCC system_header
 #endif
 #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)

Modified: branches/release/boost/exception/diagnostic_information.hpp
==============================================================================
--- branches/release/boost/exception/diagnostic_information.hpp (original)
+++ branches/release/boost/exception/diagnostic_information.hpp 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -5,7 +5,7 @@
 
 #ifndef UUID_0552D49838DD11DD90146B8956D89593
 #define UUID_0552D49838DD11DD90146B8956D89593
-#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
 #pragma GCC system_header
 #endif
 #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
@@ -31,17 +31,17 @@
     namespace
     exception_detail
         {
- std::string diagnostic_information_impl( boost::exception const *, std::exception const *, bool );
+ std::string diagnostic_information_impl( boost::exception const *, std::exception const *, bool, bool );
         }
 
     inline
     std::string
- current_exception_diagnostic_information()
+ current_exception_diagnostic_information( bool verbose=true)
         {
         boost::exception const * be=current_exception_cast<boost::exception const>();
         std::exception const * se=current_exception_cast<std::exception const>();
         if( be || se )
- return exception_detail::diagnostic_information_impl(be,se,true);
+ return exception_detail::diagnostic_information_impl(be,se,true,verbose);
         else
             return "No diagnostic information available.";
         }
@@ -107,7 +107,7 @@
 
         inline
         std::string
- diagnostic_information_impl( boost::exception const * be, std::exception const * se, bool with_what )
+ diagnostic_information_impl( boost::exception const * be, std::exception const * se, bool with_what, bool verbose )
             {
             if( !be && !se )
                 return "Unknown exception.";
@@ -125,7 +125,7 @@
                     return wh;
                 }
             std::ostringstream tmp;
- if( be )
+ if( be && verbose )
                 {
                 char const * const * f=get_error_info<throw_file>(*be);
                 int const * l=get_error_info<throw_line>(*be);
@@ -149,36 +149,37 @@
                     }
                 }
 #ifndef BOOST_NO_RTTI
- tmp << std::string("Dynamic exception type: ") <<
- units::detail::demangle((be?(BOOST_EXCEPTION_DYNAMIC_TYPEID(*be)):(BOOST_EXCEPTION_DYNAMIC_TYPEID(*se))).type_->name()) << '\n';
+ if ( verbose )
+ tmp << std::string("Dynamic exception type: ") <<
+ units::detail::demangle((be?(BOOST_EXCEPTION_DYNAMIC_TYPEID(*be)):(BOOST_EXCEPTION_DYNAMIC_TYPEID(*se))).type_->name()) << '\n';
 #endif
- if( with_what && se )
+ if( with_what && se && verbose )
                 tmp << "std::exception::what: " << wh << '\n';
             if( be )
                 if( char const * s=exception_detail::get_diagnostic_information(*be,tmp.str().c_str()) )
                     if( *s )
- return s;
+ return std::string(s);
             return tmp.str();
             }
         }
 
     template <class T>
     std::string
- diagnostic_information( T const & e )
+ diagnostic_information( T const & e, bool verbose=true )
         {
- return exception_detail::diagnostic_information_impl(exception_detail::get_boost_exception(&e),exception_detail::get_std_exception(&e),true);
+ return exception_detail::diagnostic_information_impl(exception_detail::get_boost_exception(&e),exception_detail::get_std_exception(&e),true,verbose);
         }
 
     inline
     char const *
- diagnostic_information_what( exception const & e ) throw()
+ diagnostic_information_what( exception const & e, bool verbose=true ) throw()
         {
         char const * w=0;
 #ifndef BOOST_NO_EXCEPTIONS
         try
             {
 #endif
- (void) exception_detail::diagnostic_information_impl(&e,0,false);
+ (void) exception_detail::diagnostic_information_impl(&e,0,false,verbose);
             if( char const * di=exception_detail::get_diagnostic_information(e,0) )
                 return di;
             else

Modified: branches/release/boost/exception/errinfo_errno.hpp
==============================================================================
--- branches/release/boost/exception/errinfo_errno.hpp (original)
+++ branches/release/boost/exception/errinfo_errno.hpp 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -5,7 +5,7 @@
 
 #ifndef UUID_F0EE17BE6C1211DE87FF459155D89593
 #define UUID_F0EE17BE6C1211DE87FF459155D89593
-#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
 #pragma GCC system_header
 #endif
 #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)

Modified: branches/release/boost/exception/exception.hpp
==============================================================================
--- branches/release/boost/exception/exception.hpp (original)
+++ branches/release/boost/exception/exception.hpp 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -5,7 +5,7 @@
 
 #ifndef UUID_274DA366004E11DCB1DDFE2E56D89593
 #define UUID_274DA366004E11DCB1DDFE2E56D89593
-#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
 #pragma GCC system_header
 #endif
 #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)

Modified: branches/release/boost/exception/get_error_info.hpp
==============================================================================
--- branches/release/boost/exception/get_error_info.hpp (original)
+++ branches/release/boost/exception/get_error_info.hpp 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -5,7 +5,7 @@
 
 #ifndef UUID_1A590226753311DD9E4CCF6156D89593
 #define UUID_1A590226753311DD9E4CCF6156D89593
-#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
 #pragma GCC system_header
 #endif
 #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)

Modified: branches/release/boost/exception/info.hpp
==============================================================================
--- branches/release/boost/exception/info.hpp (original)
+++ branches/release/boost/exception/info.hpp 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -5,7 +5,7 @@
 
 #ifndef UUID_8D22C4CA9CC811DCAA9133D256D89593
 #define UUID_8D22C4CA9CC811DCAA9133D256D89593
-#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
 #pragma GCC system_header
 #endif
 #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
@@ -24,41 +24,40 @@
     {
     template <class Tag,class T>
     inline
- typename enable_if<has_to_string<T>,std::string>::type
- to_string( error_info<Tag,T> const & x )
+ std::string
+ error_info_name( error_info<Tag,T> const & x )
         {
- return to_string(x.value());
+ return tag_type_name<Tag>();
         }
 
     template <class Tag,class T>
     inline
- error_info<Tag,T>::
- error_info( value_type const & value ):
- value_(value)
+ std::string
+ to_string( error_info<Tag,T> const & x )
         {
+ return '[' + error_info_name(x) + "] = " + to_string_stub(x.value()) + '\n';
         }
 
     template <class Tag,class T>
     inline
     error_info<Tag,T>::
- ~error_info() throw()
+ error_info( value_type const & value ):
+ value_(value)
         {
         }
 
     template <class Tag,class T>
     inline
- std::string
     error_info<Tag,T>::
- tag_typeid_name() const
+ ~error_info() throw()
         {
- return tag_type_name<Tag>();
         }
 
     template <class Tag,class T>
     inline
     std::string
     error_info<Tag,T>::
- value_as_string() const
+ name_value_string() const
         {
         return to_string_stub(*this);
         }
@@ -114,7 +113,7 @@
                     for( error_info_map::const_iterator i=info_.begin(),end=info_.end(); i!=end; ++i )
                         {
                         error_info_base const & x = *i->second;
- tmp << '[' << x.tag_typeid_name() << "] = " << x.value_as_string() << '\n';
+ tmp << x.name_value_string();
                         }
                     tmp.str().swap(diagnostic_info_str_);
                     }

Modified: branches/release/boost/exception/info_tuple.hpp
==============================================================================
--- branches/release/boost/exception/info_tuple.hpp (original)
+++ branches/release/boost/exception/info_tuple.hpp 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -5,7 +5,7 @@
 
 #ifndef UUID_63EE924290FB11DC87BB856555D89593
 #define UUID_63EE924290FB11DC87BB856555D89593
-#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
 #pragma GCC system_header
 #endif
 #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)

Modified: branches/release/boost/exception/to_string.hpp
==============================================================================
--- branches/release/boost/exception/to_string.hpp (original)
+++ branches/release/boost/exception/to_string.hpp 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -5,7 +5,7 @@
 
 #ifndef UUID_7E48761AD92811DC9011477D56D89593
 #define UUID_7E48761AD92811DC9011477D56D89593
-#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
 #pragma GCC system_header
 #endif
 #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
@@ -19,11 +19,16 @@
 namespace
 boost
     {
+ template <class T,class U>
+ std::string to_string( std::pair<T,U> const & );
+ std::string to_string( std::exception const & );
+
     namespace
     to_string_detail
         {
         template <class T>
         typename disable_if<is_output_streamable<T>,char>::type to_string( T const & );
+ using boost::to_string;
 
         template <class,bool IsOutputStreamable>
         struct has_to_string_impl;

Modified: branches/release/boost/exception/to_string_stub.hpp
==============================================================================
--- branches/release/boost/exception/to_string_stub.hpp (original)
+++ branches/release/boost/exception/to_string_stub.hpp 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -5,7 +5,7 @@
 
 #ifndef UUID_E788439ED9F011DCB181F25B55D89593
 #define UUID_E788439ED9F011DCB181F25B55D89593
-#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
 #pragma GCC system_header
 #endif
 #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
@@ -101,6 +101,14 @@
         {
         return exception_detail::to_string_dispatch::dispatch(x,s);
         }
+
+ template <class T,class U,class Stub>
+ inline
+ std::string
+ to_string_stub( std::pair<T,U> const & x, Stub s )
+ {
+ return std::string("(") + to_string_stub(x.first,s) + ',' + to_string_stub(x.second,s) + ')';
+ }
     }
 
 #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)

Modified: branches/release/libs/exception/doc/BOOST_THROW_EXCEPTION.html
==============================================================================
--- branches/release/libs/exception/doc/BOOST_THROW_EXCEPTION.html (original)
+++ branches/release/libs/exception/doc/BOOST_THROW_EXCEPTION.html 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -27,15 +27,15 @@
     #include &lt;boost/current_function.hpp&gt;
     #define <span class="RenoLink">BOOST_THROW_EXCEPTION</span>(x)\
         ::boost::<span class="RenoLink">throw_exception</span>( ::boost::<span class="RenoLink">enable_error_info</span>(x) &lt;&lt;\
- ::boost::<span class="RenoLink">throw_function</span>(BOOST_CURRENT_FUNCTION) &lt;&lt;\
+ ::boost::<span class="RenoLink">throw_function</span>(<span class="RenoLink">BOOST_THROW_EXCEPTION_CURRENT_FUNCTION</span>) &lt;&lt;\
         ::boost::<span class="RenoLink">throw_file</span>(__FILE__) &lt;&lt;\
         ::boost::<span class="RenoLink">throw_line</span>((int)__LINE__) )
 #else
     #define <span class="RenoLink">BOOST_THROW_EXCEPTION</span>(x) ::boost::<span class="RenoLink">throw_exception</span>(x)
 #endif</pre>
-</div></div><p>This macro takes an exception object, records BOOST_CURRENT_FUNCTION, __FILE__ and __LINE__ in it, and forwards it to <span class="RenoLink">throw_exception</span>. To recover this information at the catch site, use <span class="RenoLink">get_error_info</span>; the information is also included in the message returned by <span class="RenoLink">diagnostic_information</span>.</p>
+</div></div><p>This macro takes an exception object, records the current function name, __FILE__ and __LINE__ in it, and forwards it to <span class="RenoLink">throw_exception</span>. To recover this information at the catch site, use <span class="RenoLink">get_error_info</span>; the information is also included in the message returned by <span class="RenoLink">diagnostic_information</span>.</p>
 </div><div class="RenoAutoDIV"><div class="RenoHR"><hr/></div>
-See also: <span class="RenoPageList">Boost Exception&nbsp;| boost/throw_exception.hpp&nbsp;| Frequently Asked Questions</span>
+See also: <span class="RenoPageList">Boost Exception&nbsp;| boost/throw_exception.hpp&nbsp;| Configuration Macros&nbsp;| Frequently Asked Questions</span>
 </div>
 <!-- Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. -->
 <!-- Distributed under the Boost Software License, Version 1.0. (See accompanying -->

Modified: branches/release/libs/exception/doc/boost_exception_all_hpp.html
==============================================================================
--- branches/release/libs/exception/doc/boost_exception_all_hpp.html (original)
+++ branches/release/libs/exception/doc/boost_exception_all_hpp.html 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -40,7 +40,7 @@
 #include &lt;<span class="RenoLink">boost/exception_ptr.hpp</span>&gt;
 #endif</span></pre>
 </div></div><div class="RenoAutoDIV"><div class="RenoHR"><hr/></div>
-See also: <span class="RenoPageList">boost/exception.hpp&nbsp;| Diagnostic Information&nbsp;| Integrating Boost Exception in Existing Exception Class Hierarchies&nbsp;| Synopsis</span>
+See also: <span class="RenoPageList">Diagnostic Information&nbsp;| Integrating Boost Exception in Existing Exception Class Hierarchies&nbsp;| Synopsis</span>
 </div>
 <!-- Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. -->
 <!-- Distributed under the Boost Software License, Version 1.0. (See accompanying -->

Modified: branches/release/libs/exception/doc/boost_exception_diagnostic_information_hpp.html
==============================================================================
--- branches/release/libs/exception/doc/boost_exception_diagnostic_information_hpp.html (original)
+++ branches/release/libs/exception/doc/boost_exception_diagnostic_information_hpp.html 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -30,11 +30,11 @@
 <span class="RenoIncludeSPAN"> class <span class="RenoLink">exception</span>;</span>
 
 <span class="RenoIncludeSPAN"> <span class="RenoIncludeSPAN">template &lt;class E&gt;
- std::string <span class="RenoLink">diagnostic_information</span>( E const &amp; e );
+ std::string <span class="RenoLink">diagnostic_information</span>( E const &amp; e, bool verbose=true );
     
- std::string <span class="RenoLink">diagnostic_information</span>( <span class="RenoLink">exception_ptr</span> const &amp; p );</span>
+ std::string <span class="RenoLink">diagnostic_information</span>( <span class="RenoLink">exception_ptr</span> const &amp; p, bool verbose=true );</span>
     
- <span class="RenoIncludeSPAN">char const * <span class="RenoLink">diagnostic_information_what</span>( boost::<span class="RenoLink">exception</span> const &amp; e ) throw();</span>
+ <span class="RenoIncludeSPAN">char const * <span class="RenoLink">diagnostic_information_what</span>( boost::<span class="RenoLink">exception</span> const &amp; e, bool verbose=true ) throw();</span>
     
     <span class="RenoIncludeSPAN">std::string <span class="RenoLink">current_exception_diagnostic_information</span>();</span></span>
     }</pre>

Modified: branches/release/libs/exception/doc/boost_exception_get_error_info_hpp.html
==============================================================================
--- branches/release/libs/exception/doc/boost_exception_get_error_info_hpp.html (original)
+++ branches/release/libs/exception/doc/boost_exception_get_error_info_hpp.html 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -28,10 +28,10 @@
 boost
     {
 <span class="RenoIncludeSPAN"> <span class="RenoIncludeSPAN">template &lt;class ErrorInfo,class E&gt;
- typename ErrorInfo::<span class="RenoLink">error_info::value_type</span> const * <span class="RenoLink">get_error_info</span>( E const &amp; x );
+ typename ErrorInfo::<span class="RenoLink">error_info::value_type</span> const * <span class="RenoLink">get_error_info</span>( E const &amp; x );
     
     template &lt;class ErrorInfo,class E&gt;
- typename ErrorInfo::<span class="RenoLink">error_info::value_type</span> * <span class="RenoLink">get_error_info</span>( E &amp; x );</span></span>
+ typename ErrorInfo::<span class="RenoLink">error_info::value_type</span> * <span class="RenoLink">get_error_info</span>( E &amp; x );</span></span>
     }</pre>
 </div></div><div class="RenoAutoDIV"><div class="RenoHR"><hr/></div>
 See also: <span class="RenoPageList">boost/exception/all.hpp&nbsp;| error_info</span>

Deleted: branches/release/libs/exception/doc/boost_exception_hpp.html
==============================================================================
--- branches/release/libs/exception/doc/boost_exception_hpp.html 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
+++ (empty file)
@@ -1,42 +0,0 @@
-<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
-'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
-<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
-<head>
- <meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
- <title>boost/exception.hpp</title>
- <link href='reno.css' type='text/css' rel='stylesheet'/>
-</head>
-<body>
-<div class="body-0">
-<div class="body-1">
-<div class="body-2">
-<div>
-<div id="boost_logo">
-Boost
-</div>
-<h1>Boost Exception</h1>
-</div>
-<!-- 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) -->
-<div class="RenoIncludeDIV"><div class="RenoAutoDIV"><h2>boost/exception.hpp</h2>
-</div>
-<p>This header has been deprecated.</p>
-<p>Please #include &lt;<span class="RenoLink">boost/exception/all.hpp</span>&gt; instead.</p>
-</div><div class="RenoAutoDIV"></div>
-<!-- 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) -->
-<div id="footer">
-<p>
-<a class="logo" href="http://jigsaw.w3.org/css-validator/check/referer"><img class="logo_pic" src="valid-css.png" alt="Valid CSS" height="31" width="88"/></a>
-<a class="logo" href="http://validator.w3.org/check?uri=referer"><img class="logo_pic" src="valid-xhtml.png" alt="Valid XHTML 1.0" height="31" width="88"/></a>
-<small>Copyright (c) 2006-2009 by Emil Dotchevski and Reverge Studios, Inc.<br/>
-Distributed under the Boost Software License, Version 1.0.</small>
-</p>
-</div>
-</div>
-</div>
-</div>
-</body>
-</html>

Modified: branches/release/libs/exception/doc/boost_throw_exception_hpp.html
==============================================================================
--- branches/release/libs/exception/doc/boost_throw_exception_hpp.html (original)
+++ branches/release/libs/exception/doc/boost_throw_exception_hpp.html 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -27,7 +27,7 @@
     #include &lt;boost/current_function.hpp&gt;
     #define <span class="RenoLink">BOOST_THROW_EXCEPTION</span>(x)\
         ::boost::<span class="RenoLink">throw_exception</span>( ::boost::<span class="RenoLink">enable_error_info</span>(x) &lt;&lt;\
- ::boost::<span class="RenoLink">throw_function</span>(BOOST_CURRENT_FUNCTION) &lt;&lt;\
+ ::boost::<span class="RenoLink">throw_function</span>(<span class="RenoLink">BOOST_THROW_EXCEPTION_CURRENT_FUNCTION</span>) &lt;&lt;\
         ::boost::<span class="RenoLink">throw_file</span>(__FILE__) &lt;&lt;\
         ::boost::<span class="RenoLink">throw_line</span>((int)__LINE__) )
 #else

Modified: branches/release/libs/exception/doc/configuration_macros.html
==============================================================================
--- branches/release/libs/exception/doc/configuration_macros.html (original)
+++ branches/release/libs/exception/doc/configuration_macros.html 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -32,8 +32,10 @@
 <p>Note that on some non-conformant compilers, for example MSVC 7.0 and older, as well as BCC, BOOST_EXCEPTION_DISABLE is implicitly defined in <span class="RenoLink">boost/throw_exception.hpp</span>.</p>
 <p><b>BOOST_NO_EXCEPTIONS</b></p>
 <p>This macro disables exception handling in Boost, forwarding all exceptions to a user-defined non-template version of boost::<span class="RenoLink">throw_exception</span>. However, unless BOOST_EXCEPTION_DISABLE is also defined, users can still examine the exception object for any data added at the point of the throw, or use boost::<span class="RenoLink">diagnostic_information</span> (of course under BOOST_NO_EXCEPTIONS, the user-defined boost::throw_exception is not allowed to return to the caller.)</p>
+<p><b>BOOST_THROW_EXCEPTION_CURRENT_FUNCTION</b></p>
+<p>The <span class="RenoLink">BOOST_THROW_EXCEPTION</span> macro uses BOOST_THROW_EXCEPTION_CURRENT_FUNCTION to record the name of the current function in the exception object. Unless overridden by the user, BOOST_THROW_EXCEPTION_CURRENT_FUNCTION expands to BOOST_CURRENT_FUNCTION.</p>
 </div><div class="RenoAutoDIV"><div class="RenoHR"><hr/></div>
-See also: <span class="RenoPageList">Boost Exception&nbsp;| boost/exception/all.hpp&nbsp;| get_error_info</span>
+See also: <span class="RenoPageList">BOOST_THROW_EXCEPTION&nbsp;| Boost Exception&nbsp;| boost/exception/all.hpp&nbsp;| Frequently Asked Questions&nbsp;| get_error_info</span>
 </div>
 <!-- Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. -->
 <!-- Distributed under the Boost Software License, Version 1.0. (See accompanying -->

Modified: branches/release/libs/exception/doc/current_exception_diagnostic_information.html
==============================================================================
--- branches/release/libs/exception/doc/current_exception_diagnostic_information.html (original)
+++ branches/release/libs/exception/doc/current_exception_diagnostic_information.html 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -52,7 +52,7 @@
         }
     }</pre>
 </div><div class="RenoAutoDIV"><div class="RenoHR"><hr/></div>
-See also: <span class="RenoPageList">Boost Exception&nbsp;| boost/exception/diagnostic_information.hpp&nbsp;| diagnostic_information</span>
+See also: <span class="RenoPageList">Boost Exception&nbsp;| boost/exception/diagnostic_information.hpp&nbsp;| diagnostic_information&nbsp;| Frequently Asked Questions</span>
 </div>
 <!-- Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. -->
 <!-- Distributed under the Boost Software License, Version 1.0. (See accompanying -->

Modified: branches/release/libs/exception/doc/diagnostic_information.html
==============================================================================
--- branches/release/libs/exception/doc/diagnostic_information.html (original)
+++ branches/release/libs/exception/doc/diagnostic_information.html 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -26,25 +26,21 @@
 boost
     {
 <span class="RenoIncludeSPAN"> template &lt;class E&gt;
- std::string <span class="RenoLink">diagnostic_information</span>( E const &amp; e );
+ std::string <span class="RenoLink">diagnostic_information</span>( E const &amp; e, bool verbose=true );
     
- std::string <span class="RenoLink">diagnostic_information</span>( <span class="RenoLink">exception_ptr</span> const &amp; p );</span>
+ std::string <span class="RenoLink">diagnostic_information</span>( <span class="RenoLink">exception_ptr</span> const &amp; p, bool verbose=true );</span>
     }</pre>
 </div><h4>Returns:</h4>
-<p>A string value that contains varying amount of implementation-specific diagnostic information about the passed object:</p>
-<div><ul><li>If E can be statically converted to boost::<span class="RenoLink">exception</span>, the returned value contains the string representations of all <span class="RenoLink">error_info</span> objects stored in the boost::<span class="RenoLink">exception</span> through <span class="RenoLink">operator<<</span>, along with other diagnostic information relevant to the exception. If e can be dynamically converted to std::exception, the returned value also contains the what() string.</li>
-<li>Otherwise, if E can be statically converted to std::exception:<div><ul><li>if e can be dynamically converted to boost::exception, the returned value is the same as if E could be statically converted to boost::<span class="RenoLink">exception</span>;</li>
-<li>otherwise the returned value contains the what() string.</li>
+<p>A string value that contains varying amount of diagnostic information about the passed object:</p>
+<div><ul><li> If E can be statically converted to either boost::<span class="RenoLink">exception</span> or to std::exception, dynamic_cast is used to access both the boost::<span class="RenoLink">exception</span> and std::exception subobjects of e; otherwise, the boost::<span class="RenoLink">diagnostic_information</span> template is not available.</li>
+<li> The returned value contains the string representations of all <span class="RenoLink">error_info</span> objects stored in the boost::<span class="RenoLink">exception</span> subobject through <span class="RenoLink">operator<<</span>.</li>
+<li> In addition, if verbose is true, it contains other diagnostic information relevant to the exception, including the string returned by std::exception::what().</li>
 </ul></div>
-</li>
-<li>Otherwise, the boost::<span class="RenoLink">diagnostic_information</span> template is not available.</li>
-</ul></div>
-<p>The string representation of each <span class="RenoLink">error_info</span> object is deduced by a function call that is bound at the time the <span class="RenoLink">error_info</span>&lt;Tag,T&gt; template is instantiated. The following overload resolutions are attempted in order:</p>
-<div><ol><li>Unqualified call to to_string(x), where x is of type <span class="RenoLink">error_info</span>&lt;Tag,T&gt; (the return value is expected to be of type std::string.)</li>
-<li>Unqualified call to to_string(x.<span class="RenoLink">value</span>()) (the return value is expected to be of type std::string.)</li>
+<p>The string representation of each <span class="RenoLink">error_info</span> object is deduced by an unqualified call to to_string(x), where x is of type <span class="RenoLink">error_info</span>&lt;Tag,T&gt;, for which Boost Exception defines a generic overload. It converts x.<span class="RenoLink">value</span>() to string, attempting to bind (at the time the <span class="RenoLink">error_info</span>&lt;Tag,T&gt; template is instantiated) the following functions in order:</p>
+<div><ol><li>Unqualified call to to_string(x.<span class="RenoLink">value</span>()) (the return value is expected to be of type std::string.)</li>
 <li>Unqualified call to s &lt;&lt; x.<span class="RenoLink">value</span>(), where s is a std::ostringstream.</li>
 </ol></div>
-<p>The first successfully bound function is used at the time <span class="RenoLink">diagnostic_information</span> is called; if all 3 overload resolutions are unsuccessful, the system is unable to convert the <span class="RenoLink">error_info</span> object to string, and <i>an unspecified stub string value is used without issuing a compile error.</i></p>
+<p>The first successfully bound function is used at the time <span class="RenoLink">diagnostic_information</span> is called; if both overload resolutions are unsuccessful, the system is unable to convert the <span class="RenoLink">error_info</span> object to string, and <i>an unspecified stub string value is used without issuing a compile error.</i></p>
 <p>The <span class="RenoLink">exception_ptr</span> overload of <span class="RenoLink">diagnostic_information</span> is equivalent to:</p>
 <pre>if( p )
     try
@@ -53,14 +49,9 @@
         }
     catch(...)
         {
- return <span class="RenoLink">current_exception_diagnostic_information</span>();
+ return <span class="RenoLink">current_exception_diagnostic_information</span>(verbose);
         }
 else return &lt;unspecified-string-value&gt;;</pre>
-<h4>Notes:</h4>
-<div><ul><li>The format of the returned string is unspecified.</li>
-<li>The returned string is <i>not</i> user-friendly.</li>
-<li>The returned string may include additional platform-specific diagnostic information.</li>
-</ul></div>
 <div class="RenoIncludeDIV"><h4>Example:</h4>
 <p>this is a possible output from the <span class="RenoLink">diagnostic_information</span> function, as used in <i>libs/exception/example/example_io.cpp:</i></p>
 <pre>example_io.cpp(70): Throw in function class boost::shared_ptr&lt;struct _iobuf&gt; __cdecl my_fopen(const char *,const char *)
@@ -71,7 +62,7 @@
 [struct boost::<span class="RenoLink">errinfo_file_name</span>_ *] = tmp1.txt
 [struct boost::<span class="RenoLink">errinfo_file_open_mode</span>_ *] = rb</pre>
 </div></div><div class="RenoAutoDIV"><div class="RenoHR"><hr/></div>
-See also: <span class="RenoPageList">BOOST_THROW_EXCEPTION&nbsp;| Boost Exception&nbsp;| boost/exception/diagnostic_information.hpp&nbsp;| Configuration Macros&nbsp;| current_exception_diagnostic_information&nbsp;| Diagnostic Information&nbsp;| diagnostic_information_what&nbsp;| Frequently Asked Questions&nbsp;| Motivation&nbsp;| throw_exception</span>
+See also: <span class="RenoPageList">BOOST_THROW_EXCEPTION&nbsp;| Boost Exception&nbsp;| boost/exception/diagnostic_information.hpp&nbsp;| Configuration Macros&nbsp;| current_exception_diagnostic_information&nbsp;| Diagnostic Information&nbsp;| diagnostic_information_what&nbsp;| Frequently Asked Questions&nbsp;| Motivation</span>
 </div>
 <!-- Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. -->
 <!-- Distributed under the Boost Software License, Version 1.0. (See accompanying -->

Modified: branches/release/libs/exception/doc/diagnostic_information_what.html
==============================================================================
--- branches/release/libs/exception/doc/diagnostic_information_what.html (original)
+++ branches/release/libs/exception/doc/diagnostic_information_what.html 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -25,7 +25,7 @@
 <pre>namespace
 boost
     {
-<span class="RenoIncludeSPAN"> char const * <span class="RenoLink">diagnostic_information_what</span>( boost::<span class="RenoLink">exception</span> const &amp; e ) throw();</span>
+<span class="RenoIncludeSPAN"> char const * <span class="RenoLink">diagnostic_information_what</span>( boost::<span class="RenoLink">exception</span> const &amp; e, bool verbose=true ) throw();</span>
     }</pre>
 </div><p>The <span class="RenoLink">diagnostic_information_what</span> function is intended to be called from a user-defined std::exception::what() override. This allows diagnostic information to be returned as the what() string.</p>
 <h4>Returns:</h4>

Modified: branches/release/libs/exception/doc/enable_current_exception.html
==============================================================================
--- branches/release/libs/exception/doc/enable_current_exception.html (original)
+++ branches/release/libs/exception/doc/enable_current_exception.html 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -48,7 +48,7 @@
 <h4>Note:</h4>
 <p>Instead of using the throw keyword directly, it is preferable to call boost::<span class="RenoLink">throw_exception</span>. This is guaranteed to throw an exception that derives from boost::<span class="RenoLink">exception</span> and supports the <span class="RenoLink">exception_ptr</span> functionality.</p>
 </div><div class="RenoAutoDIV"><div class="RenoHR"><hr/></div>
-See also: <span class="RenoPageList">Boost Exception&nbsp;| boost/exception/enable_current_exception.hpp&nbsp;| Configuration Macros&nbsp;| copy_exception&nbsp;| current_exception&nbsp;| Frequently Asked Questions&nbsp;| Transporting of Exceptions Between Threads&nbsp;| throw_exception</span>
+See also: <span class="RenoPageList">Boost Exception&nbsp;| boost/exception/enable_current_exception.hpp&nbsp;| Configuration Macros&nbsp;| copy_exception&nbsp;| current_exception&nbsp;| Transporting of Exceptions Between Threads</span>
 </div>
 <!-- Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. -->
 <!-- Distributed under the Boost Software License, Version 1.0. (See accompanying -->

Modified: branches/release/libs/exception/doc/enable_error_info.html
==============================================================================
--- branches/release/libs/exception/doc/enable_error_info.html (original)
+++ branches/release/libs/exception/doc/enable_error_info.html 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -37,7 +37,7 @@
 <h4>Throws:</h4>
 <p>Nothing.</p>
 </div><div class="RenoAutoDIV"><div class="RenoHR"><hr/></div>
-See also: <span class="RenoPageList">BOOST_THROW_EXCEPTION&nbsp;| Boost Exception&nbsp;| boost/exception/enable_error_info.hpp&nbsp;| Configuration Macros&nbsp;| Frequently Asked Questions&nbsp;| Integrating Boost Exception in Existing Exception Class Hierarchies&nbsp;| throw_exception</span>
+See also: <span class="RenoPageList">BOOST_THROW_EXCEPTION&nbsp;| Boost Exception&nbsp;| boost/exception/enable_error_info.hpp&nbsp;| Configuration Macros&nbsp;| Frequently Asked Questions&nbsp;| Integrating Boost Exception in Existing Exception Class Hierarchies</span>
 </div>
 <!-- Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. -->
 <!-- Distributed under the Boost Software License, Version 1.0. (See accompanying -->

Modified: branches/release/libs/exception/doc/exception.html
==============================================================================
--- branches/release/libs/exception/doc/exception.html (original)
+++ branches/release/libs/exception/doc/exception.html 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -40,7 +40,7 @@
 <p>To retrieve data from a boost::<span class="RenoLink">exception</span> object, use the <span class="RenoLink">get_error_info</span> function template.</p>
 </div><div class="RenoHR"><hr/></div>
 <h3>See Also:</h3>
-<div class="RenoPageList">Configuration Macros&nbsp;| current_exception&nbsp;| current_exception_diagnostic_information&nbsp;| Diagnostic Information&nbsp;| diagnostic_information&nbsp;| diagnostic_information_what&nbsp;| enable_current_exception&nbsp;| enable_error_info&nbsp;| error_info&nbsp;| exception_ptr&nbsp;| Frequently Asked Questions&nbsp;| get_error_info&nbsp;| Motivation&nbsp;| Transporting of Arbitrary Data to the Catch Site&nbsp
;| Transporting of Exceptions Between Threads&nbsp;| tuple/operator<<&nbsp;| unknown_exception</div>
+<div class="RenoPageList">Configuration Macros&nbsp;| current_exception&nbsp;| current_exception_diagnostic_information&nbsp;| Diagnostic Information&nbsp;| diagnostic_information&nbsp;| diagnostic_information_what&nbsp;| enable_current_exception&nbsp;| enable_error_info&nbsp;| error_info&nbsp;| exception_ptr&nbsp;| Frequently Asked Questions&nbsp;| get_error_info&nbsp;| Motivation&nbsp;| Transporting of Arbitrary Data to the Catch Site&nbsp
;| Transporting of Exceptions Between Threads&nbsp;| throw_exception&nbsp;| tuple/operator<<&nbsp;| unknown_exception</div>
 <!-- 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) -->

Modified: branches/release/libs/exception/doc/exception_ptr.html
==============================================================================
--- branches/release/libs/exception/doc/exception_ptr.html (original)
+++ branches/release/libs/exception/doc/exception_ptr.html 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -40,7 +40,7 @@
 <h4>Nesting of exceptions:</h4>
 <p>An <span class="RenoLink">exception_ptr</span> can be added as <span class="RenoLink">error_info</span> to any boost::<span class="RenoLink">exception</span>. This is a convenient way to nest exceptions. There is no limit on the depth of the nesting, however cyclic references result in undefined behavior.</p>
 </div><div class="RenoAutoDIV"><div class="RenoHR"><hr/></div>
-See also: <span class="RenoPageList">Boost Exception&nbsp;| boost/exception/errinfo_nested_exception.hpp&nbsp;| boost/exception_ptr.hpp&nbsp;| copy_exception&nbsp;| current_exception&nbsp;| diagnostic_information&nbsp;| enable_current_exception&nbsp;| Frequently Asked Questions&nbsp;| original_exception_type&nbsp;| rethrow_exception&nbsp;| unknown_exception</span>
+See also: <span class="RenoPageList">Boost Exception&nbsp;| boost/exception/errinfo_nested_exception.hpp&nbsp;| boost/exception_ptr.hpp&nbsp;| copy_exception&nbsp;| current_exception&nbsp;| diagnostic_information&nbsp;| enable_current_exception&nbsp;| original_exception_type&nbsp;| rethrow_exception&nbsp;| throw_exception&nbsp;| unknown_exception</span>
 </div>
 <!-- Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. -->
 <!-- Distributed under the Boost Software License, Version 1.0. (See accompanying -->

Modified: branches/release/libs/exception/doc/frequently_asked_questions.html
==============================================================================
--- branches/release/libs/exception/doc/frequently_asked_questions.html (original)
+++ branches/release/libs/exception/doc/frequently_asked_questions.html 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -21,9 +21,35 @@
 <!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
 <div class="RenoIncludeDIV"><div class="RenoAutoDIV"><h2>Frequently Asked Questions</h2>
 </div>
+<h3>What is the cost of calling boost::throw_exception?</h3>
+<p>The cost is that boost::<span class="RenoLink">exception</span> is added as a base of the exception emitted by boost::<span class="RenoLink">throw_exception</span> (unless the passed type already derives from boost::<span class="RenoLink">exception</span>.)</p>
+<p>Calling boost::<span class="RenoLink">throw_exception</span> does not cause dynamic memory allocations.</p>
+<h3>What is the cost of BOOST_THROW_EXCEPTION?</h3>
+<p>In addition to calling boost::<span class="RenoLink">throw_exception</span>, <span class="RenoLink">BOOST_THROW_EXCEPTION</span> invokes __FILE__, __LINE__ and the <span class="RenoLink">BOOST_THROW_EXCEPTION_CURRENT_FUNCTION</span> macros. The space required to store the information is already included in sizeof(boost::<span class="RenoLink">exception</span>).</p>
+<p>Calling <span class="RenoLink">BOOST_THROW_EXCEPTION</span> does not cause dynamic memory allocations.</p>
+<h3>Should I use boost::throw_exception or BOOST_THROW_EXCEPTION or just throw?</h3>
+<p>The benefit of calling boost::<span class="RenoLink">throw_exception</span> instead of using throw directly is that it ensures that the emitted exception derives from boost::<span class="RenoLink">exception</span> and that it is compatible with boost::<span class="RenoLink">current_exception</span>.</p>
+<p>The <span class="RenoLink">BOOST_THROW_EXCEPTION</span> macro also results in a call to boost::<span class="RenoLink">throw_exception</span>, but in addition it records in the exception object the __FILE__ and __LINE__ of the throw, as well as the pretty name of the function that throws. This enables boost::<span class="RenoLink">diagnostic_information</span> to compose a more useful, if not user-friendly message.</p>
+<p>Typical use of boost::<span class="RenoLink">diagnostic_information</span> is:</p>
+<pre>catch(...)
+ {
+ std::cerr &lt;&lt;
+ "Unexpected exception, diagnostic information follows:\n" &lt;&lt;
+ <span class="RenoLink">current_exception_diagnostic_information</span>();
+ }</pre>
+<p>This is a possible message it may display -- the information in the first line is only available if <span class="RenoLink">BOOST_THROW_EXCEPTION</span> was used to throw:</p>
+<pre>example_io.cpp(70): Throw in function class boost::shared_ptr&lt;struct _iobuf&gt; __cdecl my_fopen(const char *,const char *)
+Dynamic exception type: class boost::exception_detail::clone_impl&lt;class fopen_error&gt;
+std::exception::what: example_io error
+[struct boost::<span class="RenoLink">errinfo_api_function</span>_ *] = fopen
+[struct boost::<span class="RenoLink">errinfo_errno</span>_ *] = 2, "No such file or directory"
+[struct boost::<span class="RenoLink">errinfo_file_name</span>_ *] = tmp1.txt
+[struct boost::<span class="RenoLink">errinfo_file_open_mode</span>_ *] = rb</pre>
+<p>In some development environments, the first line in that message can be clicked to show the location of the throw in the debugger, so it's easy to set a break point and run again to see the unexpected throw in the context of its call stack.</p>
 <h3>Why doesn't boost::exception derive from std::exception?</h3>
-<p>Despite that <span class="RenoLink">virtual inheritance should be used in deriving from base exception types</span>, many programmers fail to follow this principle when deriving from std::exception. If boost::<span class="RenoLink">exception</span> derives from std::exception, using the <span class="RenoLink">enable_error_info</span> function with such user-defined types would introduce dangerous ambiguity which would break all catch(std::exception &amp;) statements.</p>
-<p>Of course, boost::<span class="RenoLink">exception</span> should not be used to replace std::exception as a base type in exception type hierarchies. Instead, it should be included as a virtual base, in addition to std::exception (which should also be derived virtually.)</p>
+<p>Despite that <span class="RenoLink">virtual inheritance should be used in deriving from base exception types</span>, quite often exception types (including the ones defined in the standard library) don't derive from std::exception virtually.</p>
+<p>If boost::<span class="RenoLink">exception</span> derives from std::exception, using the <span class="RenoLink">enable_error_info</span> function with such user-defined types would introduce dangerous ambiguity which would break all catch(std::exception &amp;) statements.</p>
+<p>Of course, boost::<span class="RenoLink">exception</span> should not be used to replace std::exception as a base type in exception type hierarchies. Instead, it should be included as a virtual base, in addition to std::exception (which should probably also be derived virtually.)</p>
 <h3>Why is boost::exception abstract?</h3>
 <p>To prevent exception-neutral contexts from erroneously erasing the type of the original exception when adding <span class="RenoLink">error_info</span> to an active exception object:</p>
 <pre>catch( boost::<span class="RenoLink">exception</span> &amp; e )
@@ -37,55 +63,16 @@
     e <span class="RenoLink"><<</span> foo_info(foo);
     throw; //Okay, re-throwing the original exception object.
     }</pre>
-<h3>What is the space overhead of the boost::exception base class?</h3>
-<p>The space overhead for the boost::exception data members is negligible in the context of exception handling. Throwing objects that derive from boost::<span class="RenoLink">exception</span> does not by itself cause dynamic memory allocations.</p>
-<p>Deriving from boost::<span class="RenoLink">exception</span> enables any data to be added to exceptions, which usually does allocate memory. However, this memory is reclaimed when the exception has been handled, and since typically user code does not allocate memory during the unrolling of the stack, adding error info to exceptions should not cause memory fragmentation.</p>
-<h3>Should I use boost::throw_exception or BOOST_THROW_EXCEPTION or just throw?</h3>
-<p>The benefit of calling boost::<span class="RenoLink">throw_exception</span> instead of using throw directly is that it ensures that the emitted exception derives from boost::<span class="RenoLink">exception</span> and that it is compatible with boost::<span class="RenoLink">current_exception</span>.</p>
-<p>The <span class="RenoLink">BOOST_THROW_EXCEPTION</span> macro also results in a call to boost::<span class="RenoLink">throw_exception</span>, but in addition it records in the exception object the __FILE__ and __LINE__ of the throw, as well as the pretty name of the function that throws. This has virtually no overhead, yet enables boost::<span class="RenoLink">diagnostic_information</span> to compose a more useful, if not user-friendly message.</p>
-<p>Typical use of boost::<span class="RenoLink">diagnostic_information</span> is:</p>
-<pre>catch( boost::exception &amp; e )
- {
- std::cerr &lt;&lt; "OMG!" &lt;&lt; boost::diagnostic_information(e);
- }
-catch( ... )
- {
- std::cerr &lt;&lt; "OMG!!!";
- }</pre>
-<p>This is a possible message it may display, the first line is only possible if <span class="RenoLink">BOOST_THROW_EXCEPTION</span> is used:</p>
-<pre>example_io.cpp(70): Throw in function class boost::shared_ptr&lt;struct _iobuf&gt; __cdecl my_fopen(const char *,const char *)
-Dynamic exception type: class boost::exception_detail::clone_impl&lt;class fopen_error&gt;
-std::exception::what: example_io error
-[struct boost::<span class="RenoLink">errinfo_api_function</span>_ *] = fopen
-[struct boost::<span class="RenoLink">errinfo_errno</span>_ *] = 2, "No such file or directory"
-[struct boost::<span class="RenoLink">errinfo_file_name</span>_ *] = tmp1.txt
-[struct boost::<span class="RenoLink">errinfo_file_open_mode</span>_ *] = rb</pre>
-<h3>Why is boost::exception integrated in boost::throw_exception?</h3>
-<p>The boost::<span class="RenoLink">throw_exception</span> function predates the Boost Exception library and there has been some concern about its current behavior of injecting boost::<span class="RenoLink">exception</span> as a base of any exception passed to boost::<span class="RenoLink">throw_exception</span>. Such concerns are dictated by the typical strict interpretation of a common principle in C and C++, that users only pay for features they actually use.</p>
-<p>The problem is that users of Boost Exception can't by themselves cause a library to throw types that derive from boost::<span class="RenoLink">exception</span>, and without this they can't use any of the Boost Exception facilities.</p>
-<p>For example, if a user wants to use Boost Serialization in a separate thread, it is desirable to be able to transport exceptions emitted by that library into the main thread where they can be analyzed to generate a user-friendly message. This can be easily achieved using boost::<span class="RenoLink">exception_ptr</span>, but this requires that Boost Serialization throws exceptions using boost::<span class="RenoLink">enable_current_exception</span>. If Boost Serialization calls boost::<span class="RenoLink">throw_exception</span> to throw, this behavior happens automatically and transparently.</p>
-<p>The cost of this integration is:</p>
-<div><ul><li> In terms of space: a pointer and 3 ints are added to the static size of exception objects.</li>
-<li> In terms of speed: the pointer is initialized to null at the point of the throw.</li>
-<li> In terms of coupling: about 400 self-contained lines of C++ with no external includes.</li>
-</ul></div>
 <h3>Why use operator&lt;&lt; overload for adding info to exceptions?</h3>
-<p>Before throwing an object of type that derives from boost::<span class="RenoLink">exception</span>, it is often desirable to add one or more <span class="RenoLink">error_info</span> objects in it. The syntactic sugar provided by <span class="RenoLink">exception/operator<<</span> allows this to be done directly in a throw expression:</p>
+<p>Before throwing an object of type that derives from boost::<span class="RenoLink">exception</span>, it is often desirable to add one or more <span class="RenoLink">error_info</span> objects in it. The syntactic sugar provided by <span class="RenoLink">operator<<</span> allows this to be done directly in a throw expression:</p>
 <pre>throw error() <span class="RenoLink"><<</span> foo_info(foo) <span class="RenoLink"><<</span> bar_info(bar);</pre>
-<p>which saves typing compared to this possible alternative:</p>
-<pre>error e;
-e.add(foo_info(foo));
-e.add(bar_info(bar));
-throw e;</pre>
-<p>and looks better than something like:</p>
-<pre>throw error().add(foo_info(foo)).add(bar_info(bar));</pre>
 <h3>Why is operator&lt;&lt; allowed to throw?</h3>
 <p>This question is referring to the following issue. Consider this throw statement example:</p>
 <pre>throw file_open_error() <span class="RenoLink"><<</span> file_name(fn);</pre>
 <p>The intention here is to throw a file_open_error, however if <span class="RenoLink">operator<<</span> fails to copy the std::string contained in the file_name <span class="RenoLink">error_info</span> wrapper, a std::bad_alloc could propagate instead. This behavior seems undesirable to some programmers.</p>
 <p>Bjarne Stroustrup, The C++ Programming Language, 3rd Edition, page 371:</p>
 <blockquote><p><i>"Throwing an exception requires an object to throw. A C++ implementation is required to have enough spare memory to be able to throw bad_alloc in case of memory exhaustion. However, it is possible that throwing some other exception will cause memory exhaustion."</i></p></blockquote>
-<p>So, an attempt to throw any exception may already result in propagating std::bad_alloc instead.</p>
+<p>Therefore, the language itself does not guarantee that an attempt to throw an exception is guaranteed to throw an object of the specified type; propagating a std::bad_alloc seems to be a possibility even outside of the scope of Boost Exception.</p>
 </div><div class="RenoAutoDIV"><div class="RenoHR"><hr/></div>
 See also: <span class="RenoPageList">Boost Exception&nbsp;| Motivation</span>
 </div>

Modified: branches/release/libs/exception/doc/get_error_info.html
==============================================================================
--- branches/release/libs/exception/doc/get_error_info.html (original)
+++ branches/release/libs/exception/doc/get_error_info.html 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -25,10 +25,10 @@
 boost
     {
 <span class="RenoIncludeSPAN"> template &lt;class ErrorInfo,class E&gt;
- typename ErrorInfo::<span class="RenoLink">error_info::value_type</span> const * get_error_info( E const &amp; x );
+ typename ErrorInfo::<span class="RenoLink">error_info::value_type</span> const * <span class="RenoLink">get_error_info</span>( E const &amp; x );
     
     template &lt;class ErrorInfo,class E&gt;
- typename ErrorInfo::<span class="RenoLink">error_info::value_type</span> * get_error_info( E &amp; x );</span>
+ typename ErrorInfo::<span class="RenoLink">error_info::value_type</span> * <span class="RenoLink">get_error_info</span>( E &amp; x );</span>
     }</pre>
 </div><h4>Requirements:</h4>
 <div><ul><li> ErrorInfo must be an instance of the <span class="RenoLink">error_info</span> template.</li>
@@ -43,7 +43,7 @@
 <h4>Note:</h4>
 <p>The interface of <span class="RenoLink">get_error_info</span> may be affected by the build <span class="RenoLink">configuration macros</span>.</p>
 </div><div class="RenoAutoDIV"><div class="RenoHR"><hr/></div>
-See also: <span class="RenoPageList">BOOST_THROW_EXCEPTION&nbsp;| Boost Exception&nbsp;| boost/exception/get_error_info.hpp&nbsp;| Configuration Macros&nbsp;| current_exception&nbsp;| error_info&nbsp;| exception&nbsp;| Motivation&nbsp;| throw_exception</span>
+See also: <span class="RenoPageList">BOOST_THROW_EXCEPTION&nbsp;| Boost Exception&nbsp;| boost/exception/get_error_info.hpp&nbsp;| Configuration Macros&nbsp;| current_exception&nbsp;| error_info&nbsp;| exception&nbsp;| Motivation</span>
 </div>
 <!-- Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. -->
 <!-- Distributed under the Boost Software License, Version 1.0. (See accompanying -->

Modified: branches/release/libs/exception/doc/synopsis.html
==============================================================================
--- branches/release/libs/exception/doc/synopsis.html (original)
+++ branches/release/libs/exception/doc/synopsis.html 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -103,11 +103,11 @@
 <span class="RenoIncludeSPAN"> class <span class="RenoLink">exception</span>;</span>
 
 <span class="RenoIncludeSPAN"> <span class="RenoIncludeSPAN">template &lt;class E&gt;
- std::string <span class="RenoLink">diagnostic_information</span>( E const &amp; e );
+ std::string <span class="RenoLink">diagnostic_information</span>( E const &amp; e, bool verbose=true );
     
- std::string <span class="RenoLink">diagnostic_information</span>( <span class="RenoLink">exception_ptr</span> const &amp; p );</span>
+ std::string <span class="RenoLink">diagnostic_information</span>( <span class="RenoLink">exception_ptr</span> const &amp; p, bool verbose=true );</span>
     
- <span class="RenoIncludeSPAN">char const * <span class="RenoLink">diagnostic_information_what</span>( boost::<span class="RenoLink">exception</span> const &amp; e ) throw();</span>
+ <span class="RenoIncludeSPAN">char const * <span class="RenoLink">diagnostic_information_what</span>( boost::<span class="RenoLink">exception</span> const &amp; e, bool verbose=true ) throw();</span>
     
     <span class="RenoIncludeSPAN">std::string <span class="RenoLink">current_exception_diagnostic_information</span>();</span></span>
     }</span></pre>
@@ -158,7 +158,7 @@
     #include &lt;boost/current_function.hpp&gt;
     #define <span class="RenoLink">BOOST_THROW_EXCEPTION</span>(x)\
         ::boost::<span class="RenoLink">throw_exception</span>( ::boost::<span class="RenoLink">enable_error_info</span>(x) &lt;&lt;\
- ::boost::<span class="RenoLink">throw_function</span>(BOOST_CURRENT_FUNCTION) &lt;&lt;\
+ ::boost::<span class="RenoLink">throw_function</span>(<span class="RenoLink">BOOST_THROW_EXCEPTION_CURRENT_FUNCTION</span>) &lt;&lt;\
         ::boost::<span class="RenoLink">throw_file</span>(__FILE__) &lt;&lt;\
         ::boost::<span class="RenoLink">throw_line</span>((int)__LINE__) )
 #else

Modified: branches/release/libs/exception/doc/throw_exception.html
==============================================================================
--- branches/release/libs/exception/doc/throw_exception.html (original)
+++ branches/release/libs/exception/doc/throw_exception.html 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -32,14 +32,17 @@
     void <span class="RenoLink">throw_exception</span>( E const &amp; e );
 #endif</span>
     }</pre>
-</div><h4>Requirements:</h4>
-<p>E must derive publicly from std::exception.</p>
-<h4>Effects:</h4>
-<div><ul><li> If BOOST_NO_EXCEPTIONS is not defined, boost::<span class="RenoLink">throw_exception</span>(e) is equivalent to throw boost::<span class="RenoLink">enable_current_exception</span>(boost::<span class="RenoLink">enable_error_info</span>(e)), unless BOOST_EXCEPTION_DISABLE is defined, in which case boost::<span class="RenoLink">throw_exception</span>(e) is equivalent to throw e;</li>
+</div><h4>Effects:</h4>
+<div><ul><li> If BOOST_NO_EXCEPTIONS is not defined, boost::<span class="RenoLink">throw_exception</span>(e) throws an exception of unspecified type that derives publicly from E and from boost::<span class="RenoLink">exception</span>.</li>
 <li> If BOOST_NO_EXCEPTIONS is defined, the function is left undefined, and the user is expected to supply an appropriate definition. Callers of <span class="RenoLink">throw_exception</span> are allowed to assume that the function never returns; therefore, if the user-defined <span class="RenoLink">throw_exception</span> returns, the behavior is undefined.</li>
 </ul></div>
-<h4>Note:</h4>
-<p>Under BOOST_NO_EXCEPTIONS, unless BOOST_EXCEPTION_DISABLE is also defined, users can examine the passed exception object using boost::<span class="RenoLink">get_error_info</span>, or format an automatic diagnostic message using boost::<span class="RenoLink">diagnostic_information</span>.</p>
+<h4>Requirements:</h4>
+<p>E must derive publicly from std::exception. E may or may not derive from boost::<span class="RenoLink">exception</span>.</p>
+<h4>Notes:</h4>
+<div><ul><li> The emitted exception can be intercepted as E &amp;, std::exception &amp;, or boost::exception &amp;.</li>
+<li> The emitted exception supports boost::<span class="RenoLink">exception_ptr</span>.</li>
+<li> If BOOST_EXCEPTION_DISABLE is defined and BOOST_NO_EXCEPTIONS is not defined, boost::<span class="RenoLink">throw_exception</span>(e) equivalent to throw e.</li>
+</ul></div>
 </div><div class="RenoAutoDIV"><div class="RenoHR"><hr/></div>
 See also: <span class="RenoPageList">BOOST_THROW_EXCEPTION&nbsp;| Boost Exception&nbsp;| boost/throw_exception.hpp&nbsp;| Configuration Macros&nbsp;| enable_current_exception&nbsp;| Frequently Asked Questions&nbsp;| Transporting of Exceptions Between Threads</span>
 </div>

Modified: branches/release/libs/exception/test/Jamfile.v2
==============================================================================
--- branches/release/libs/exception/test/Jamfile.v2 (original)
+++ branches/release/libs/exception/test/Jamfile.v2 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -28,7 +28,7 @@
 run 3-throw_exception_no_integration_test.cpp ;
 run 4-throw_exception_no_both_test.cpp ;
 run cloning_test.cpp ;
-run copy_exception_test.cpp /boost//thread : : : <threading>multi ;
+run copy_exception_test.cpp ../../thread/src/tss_null.cpp /boost//thread : : : <threading>multi ;
 run unknown_exception_test.cpp ;
 run exception_test.cpp ;
 run enable_error_info_test.cpp helper1.cpp ;
@@ -40,8 +40,8 @@
 run current_exception_cast_test.cpp ;
 run no_exceptions_test.cpp : : : <exception-handling>off ;
 run errinfos_test.cpp ;
-run exception_ptr_test.cpp/<define>BOOST_ENABLE_NON_INTRUSIVE_EXCEPTION_PTR /boost/exception /boost//thread : : : <threading>multi : non_intrusive_exception_ptr_test ;
-run exception_ptr_test.cpp /boost//thread : : : <threading>multi ;
+run exception_ptr_test.cpp/<define>BOOST_ENABLE_NON_INTRUSIVE_EXCEPTION_PTR ../../thread/src/tss_null.cpp /boost/exception /boost//thread : : : <threading>multi : non_intrusive_exception_ptr_test ;
+run exception_ptr_test.cpp ../../thread/src/tss_null.cpp /boost//thread : : : <threading>multi ;
 
 compile-fail exception_fail.cpp ;
 compile-fail throw_exception_fail.cpp ;

Modified: branches/release/libs/exception/test/diagnostic_information_test.cpp
==============================================================================
--- branches/release/libs/exception/test/diagnostic_information_test.cpp (original)
+++ branches/release/libs/exception/test/diagnostic_information_test.cpp 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -19,10 +19,7 @@
 std::string
 to_string( tagged_int2 const & x )
     {
- if( x.value()==42 )
- return "fourty-two";
- else
- return "bad value";
+ return '[' +boost::error_info_name(x) + "] = " + (x.value()==42 ? "fourty-two" : "bad value");
     }
 
 struct

Modified: branches/release/libs/exception/test/error_info_test.cpp
==============================================================================
--- branches/release/libs/exception/test/error_info_test.cpp (original)
+++ branches/release/libs/exception/test/error_info_test.cpp 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -249,12 +249,41 @@
 void
 test_add_tuple()
     {
- typedef boost::tuple<test_1,test_2> test_12;
- typedef boost::tuple<test_1,test_2,test_3> test_123;
- typedef boost::tuple<test_1,test_2,test_3,test_5> test_1235;
+ typedef boost::tuple<> tuple_test_;
+ typedef boost::tuple<test_1> tuple_test_1;
+ typedef boost::tuple<test_1,test_2> tuple_test_12;
+ typedef boost::tuple<test_1,test_2,test_3> tuple_test_123;
+ typedef boost::tuple<test_1,test_2,test_3,test_5> tuple_test_1235;
     try
         {
- throw test_exception() << test_12(42,42u);
+ throw test_exception() << tuple_test_();
+ }
+ catch(
+ test_exception & x )
+ {
+ }
+ catch(
+ ... )
+ {
+ BOOST_TEST(false);
+ }
+ try
+ {
+ throw test_exception() << tuple_test_1(42);
+ }
+ catch(
+ test_exception & x )
+ {
+ BOOST_TEST( *boost::get_error_info<test_1>(x)==42 );
+ }
+ catch(
+ ... )
+ {
+ BOOST_TEST(false);
+ }
+ try
+ {
+ throw test_exception() << tuple_test_12(42,42u);
         }
     catch(
     test_exception & x )
@@ -269,7 +298,7 @@
         }
     try
         {
- throw test_exception() << test_123(42,42u,42.0f);
+ throw test_exception() << tuple_test_123(42,42u,42.0f);
         }
     catch(
     test_exception & x )
@@ -285,7 +314,7 @@
         }
     try
         {
- throw test_exception() << test_1235(42,42u,42.0f,std::string("42"));
+ throw test_exception() << tuple_test_1235(42,42u,42.0f,std::string("42"));
         }
     catch(
     test_exception & x )

Modified: branches/release/libs/exception/test/exception_ptr_test.cpp
==============================================================================
--- branches/release/libs/exception/test/exception_ptr_test.cpp (original)
+++ branches/release/libs/exception/test/exception_ptr_test.cpp 2013-03-07 21:01:44 EST (Thu, 07 Mar 2013)
@@ -44,7 +44,7 @@
 
     explicit
     thread_handle( boost::function<void()> const & f ):
- t_(boost::bind(thread_wrapper,f,err_))
+ t_(boost::bind(thread_wrapper,f,boost::ref(err_)))
         {
         }
 
@@ -63,8 +63,8 @@
 join( thread_handle & t )
     {
     t.t_.join();
- if( t.err_ )
- rethrow_exception(t.err_);
+ assert(t.err_);
+ rethrow_exception(t.err_);
     }
 
 boost::detail::atomic_count exc_count(0);
@@ -79,7 +79,9 @@
         ++exc_count;
         }
 
- exc( exc const & )
+ exc( exc const & e ):
+ boost::exception(e),
+ std::exception(e)
         {
         ++exc_count;
         }
@@ -109,6 +111,7 @@
     try
         {
         join(*t);
+ BOOST_TEST(false);
         }
     catch(
     exc & e )
@@ -125,7 +128,7 @@
     try
         {
         std::vector< boost::shared_ptr<thread_handle> > threads;
- std::generate_n(std::inserter(threads,threads.end()),256,boost::bind(create_thread,thread_func));
+ std::generate_n(std::inserter(threads,threads.end()),1,boost::bind(create_thread,thread_func));
         std::for_each(threads.begin(),threads.end(),check);
         return boost::report_errors();
         }


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk