$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r58746 - trunk/boost/test/impl
From: eric_at_[hidden]
Date: 2010-01-06 03:53:55
Author: eric_niebler
Date: 2010-01-06 03:53:54 EST (Wed, 06 Jan 2010)
New Revision: 58746
URL: http://svn.boost.org/trac/boost/changeset/58746
Log:
remove dependence on non-standard va_copy macro
Text files modified: 
   trunk/boost/test/impl/test_tools.ipp |    27 +++++++++++----------------             
   1 files changed, 11 insertions(+), 16 deletions(-)
Modified: trunk/boost/test/impl/test_tools.ipp
==============================================================================
--- trunk/boost/test/impl/test_tools.ipp	(original)
+++ trunk/boost/test/impl/test_tools.ipp	2010-01-06 03:53:54 EST (Wed, 06 Jan 2010)
@@ -33,6 +33,8 @@
 #include <cctype>
 #include <cwchar>
 #include <stdexcept>
+#include <vector>
+#include <utility>
 #include <ios>
 
 // !! should we use #include <cstdarg>
@@ -198,20 +200,20 @@
     }
 
     case CHECK_PRED_WITH_ARGS: {
-        va_list args_copy;
+        std::vector< std::pair<char const*, lazy_ostream const*> > args_copy;
+        args_copy.reserve( num_args );
+        for( std::size_t i = 0; i < num_args; ++i ) {
+            char const* desc = va_arg( args, char const* );
+            lazy_ostream const* value = va_arg( args, lazy_ostream const* );
+            args_copy.push_back( std::make_pair( desc, value ) );
+        }
 
-#ifdef va_copy
-        va_copy( args_copy, args );
-#else
-        args_copy = args;
-#endif
         os << prefix << assertion_descr;
 
         // print predicate call description
         os << "( ";
         for( std::size_t i = 0; i < num_args; ++i ) {
-            os << va_arg( args, char const* );
-            va_arg( args, lazy_ostream const* ); // skip argument value;
+            os << args_copy[i].first;
             
             if( i != num_args-1 )
                 os << ", ";
@@ -219,12 +221,9 @@
         os << " )" << suffix;
                         
         if( tl != PASS ) {
-            args = args_copy;
-
             os << " for ( ";
             for( std::size_t i = 0; i < num_args; ++i ) {
-                va_arg( args, char const* ); // skip argument description;            
-                os << *va_arg( args, lazy_ostream const* );
+                os << *args_copy[i].second;
                 
                 if( i != num_args-1 )
                     os << ", ";
@@ -232,10 +231,6 @@
             os << " )";
         }
 
-#ifdef va_copy
-        va_end( args_copy );
-#endif
-       
         if( !pr.has_empty_message() )
             os << ". " << pr.message();
         break;