=== boost/test/impl/test_tools.ipp
==================================================================
--- boost/test/impl/test_tools.ipp	(revision 5151)
+++ boost/test/impl/test_tools.ipp	(revision 5152)
@@ -66,6 +66,7 @@
             std::size_t num_of_args, ... )
 {
     using namespace unit_test;
+    using ::boost::unit_test::lazy_ostream;
 
     if( !framework::is_initialized() )
         throw std::runtime_error( "can't use testing tools before framework is initialized" );
@@ -139,16 +140,16 @@
         va_list args;
 
         va_start( args, num_of_args );
-        char const* arg1_descr  = va_arg( args, char const* );
-        char const* arg1_val    = va_arg( args, char const* );
-        char const* arg2_descr  = va_arg( args, char const* );
-        char const* arg2_val    = va_arg( args, char const* );
+        lazy_ostream const* arg1_descr  = va_arg( args, lazy_ostream const* );
+        lazy_ostream const* arg1_val    = va_arg( args, lazy_ostream const* );
+        lazy_ostream const* arg2_descr  = va_arg( args, lazy_ostream const* );
+        lazy_ostream const* arg2_val    = va_arg( args, lazy_ostream const* );
 
         unit_test_log << unit_test::log::begin( file_name, line_num ) 
-                      << ll << prefix << arg1_descr << check_str[ct-CHECK_EQUAL] << arg2_descr << suffix;
+                      << ll << prefix << *arg1_descr << check_str[ct-CHECK_EQUAL] << *arg2_descr << suffix;
 
         if( tl != PASS )
-            unit_test_log << " [" << arg1_val << rever_str[ct-CHECK_EQUAL] << arg2_val << "]" ;
+            unit_test_log << " [" << *arg1_val << rever_str[ct-CHECK_EQUAL] << *arg2_val << "]" ;
 
         va_end( args );
         
@@ -164,19 +165,19 @@
         va_list args;
 
         va_start( args, num_of_args );
-        char const* arg1_descr  = va_arg( args, char const* );
-        char const* arg1_val    = va_arg( args, char const* );
-        char const* arg2_descr  = va_arg( args, char const* );
-        char const* arg2_val    = va_arg( args, char const* );
-        /* toler_descr = */       va_arg( args, char const* );
-        char const* toler_val   = va_arg( args, char const* );
+        lazy_ostream const* arg1_descr  = va_arg( args, lazy_ostream const* );
+        lazy_ostream const* arg1_val    = va_arg( args, lazy_ostream const* );
+        lazy_ostream const* arg2_descr  = va_arg( args, lazy_ostream const* );
+        lazy_ostream const* arg2_val    = va_arg( args, lazy_ostream const* );
+        /* toler_descr = */       va_arg( args, lazy_ostream const* );
+        lazy_ostream const* toler_val   = va_arg( args, lazy_ostream const* );
 
         unit_test_log << unit_test::log::begin( file_name, line_num ) << ll;
 
-        unit_test_log << "difference between " << arg1_descr << "{" << arg1_val << "}" 
-                      << " and "               << arg2_descr << "{" << arg2_val << "}"
+        unit_test_log << "difference between " << *arg1_descr << "{" << *arg1_val << "}" 
+                      << " and "               << *arg2_descr << "{" << *arg2_val << "}"
                       << ( tl == PASS ? " doesn't exceed " : " exceeds " )
-                      << toler_val;
+                      << *toler_val;
         if( ct == CHECK_CLOSE )
             unit_test_log << "%";
 
@@ -192,16 +193,16 @@
         va_list args;
 
         va_start( args, num_of_args );
-        char const* arg1_descr  = va_arg( args, char const* );
-        char const* arg1_val    = va_arg( args, char const* );
-        /* toler_descr = */       va_arg( args, char const* );
-        char const* toler_val   = va_arg( args, char const* );
+        lazy_ostream const* arg1_descr  = va_arg( args, lazy_ostream const* );
+        lazy_ostream const* arg1_val    = va_arg( args, lazy_ostream const* );
+        /* toler_descr = */       va_arg( args, lazy_ostream const* );
+        lazy_ostream const* toler_val   = va_arg( args, lazy_ostream const* );
 
         unit_test_log << unit_test::log::begin( file_name, line_num ) << ll;
 
-        unit_test_log << "absolute value of " << arg1_descr << "{" << arg1_val << "}" 
+        unit_test_log << "absolute value of " << *arg1_descr << "{" << *arg1_val << "}" 
                       << ( tl == PASS ? " doesn't exceed " : " exceeds " )
-                      << toler_val;
+                      << *toler_val;
 
         va_end( args );
         
@@ -223,8 +224,8 @@
 
             unit_test_log << "( ";
             for( std::size_t i = 0; i < num_of_args; ++i ) {
-                unit_test_log << va_arg( args, char const* );
-                va_arg( args, char const* ); // skip argument value;
+                unit_test_log << *va_arg( args, lazy_ostream const* );
+                va_arg( args, lazy_ostream const* ); // skip argument value;
                 
                 if( i != num_of_args-1 )
                     unit_test_log << ", ";
@@ -239,8 +240,8 @@
 
             unit_test_log << " for ( ";
             for( std::size_t i = 0; i < num_of_args; ++i ) {
-                va_arg( args, char const* ); // skip argument description;            
-                unit_test_log << va_arg( args, char const* );
+                va_arg( args, lazy_ostream const* ); // skip argument description;            
+                unit_test_log << *va_arg( args, lazy_ostream const* );
                 
                 if( i != num_of_args-1 )
                     unit_test_log << ", ";
=== boost/test/test_tools.hpp
==================================================================
--- boost/test/test_tools.hpp	(revision 5151)
+++ boost/test/test_tools.hpp	(revision 5152)
@@ -484,10 +484,11 @@
 #define PRED_PARAMS( z, m, dummy ) BOOST_PP_COMMA_IF( m ) BOOST_JOIN( arg, m ) 
 
 #define ARG_INFO( z, m, dummy )                                                     \
-    , BOOST_JOIN( BOOST_JOIN( arg, m ), _descr )                                    \
-    , (boost::wrap_stringstream().ref()                                             \
-        << ::boost::test_tools::tt_detail::                                         \
-            print_helper( BOOST_JOIN( arg, m ) )).str().c_str()                     \
+  , &(const unit_test::lazy_ostream&)(unit_test::lazy_ostream::instance()           \
+     << BOOST_JOIN( BOOST_JOIN( arg, m ), _descr ))                                 \
+  , &(const unit_test::lazy_ostream&)(unit_test::lazy_ostream::instance()           \
+     << ::boost::test_tools::tt_detail::                                            \
+          print_helper( BOOST_JOIN( arg, m ) ))                                     \
 /**/
 
 #define IMPL_FRWD( z, n, dummy )                                                    \

