$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r66387 - sandbox/function/boost/function
From: dsaritz_at_[hidden]
Date: 2010-11-03 16:31:39
Author: psiha
Date: 2010-11-03 16:31:38 EDT (Wed, 03 Nov 2010)
New Revision: 66387
URL: http://svn.boost.org/trac/boost/changeset/66387
Log:
Fixed compilation errors.
Added VisualAge workarounds.
Text files modified: 
   sandbox/function/boost/function/function_base.hpp |   105 ++++++++++++++++++++------------------- 
   1 files changed, 54 insertions(+), 51 deletions(-)
Modified: sandbox/function/boost/function/function_base.hpp
==============================================================================
--- sandbox/function/boost/function/function_base.hpp	(original)
+++ sandbox/function/boost/function/function_base.hpp	2010-11-03 16:31:38 EDT (Wed, 03 Nov 2010)
@@ -127,14 +127,14 @@
 #else
 // BCC doesn't recognize this depends on a template argument and complains
 // about the use of 'typename'
-#  define BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor,Type)     \
+#  define BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor,Type)       \
       ::boost::enable_if_c<(::boost::type_traits::ice_not<          \
                    (::boost::is_integral<Functor>::value)>::value), \
                        Type>::type
 #endif
 
 
-#if defined( __clang__ ) || ( defined( __GNUC__ ) && ( ( ( __GNUC__ * 10 ) + __GNUC_MINOR__ ) < 45 ) )
+#if defined( __IBMCPP__ ) || defined( __clang__ ) || ( defined( __GNUC__ ) && ( ( ( __GNUC__ * 10 ) + __GNUC_MINOR__ ) < 45 ) )
     #define BOOST_FUNCTION_CLANG_AND_OLD_GCC_BROKEN_STATIC_ASSERT BOOST_ASSERT
 #else
     #define BOOST_FUNCTION_CLANG_AND_OLD_GCC_BROKEN_STATIC_ASSERT BOOST_STATIC_ASSERT
@@ -1364,65 +1364,68 @@
   // Fix/properly encapsulate these members and use the function_buffer_holder.
           detail::function::vtable          const * p_vtable_;
   mutable detail::function::function_buffer         functor_ ;
-};
-
 
-class function_base::safe_mover_base : noncopyable
-{
-protected:
-    typedef detail::function::vtable          vtable;
-    typedef detail::function::function_buffer functor;
-
-protected:
-    safe_mover_base( function_base & functionToGuard, function_base & emptyFunctionToMoveTo )
-        :
-        pFunctionToRestoreTo  ( &functionToGuard                   ),
-        emptyFunctionToMoveTo_( emptyFunctionToMoveTo              ),
-        empty_handler_vtable_ ( emptyFunctionToMoveTo.get_vtable() )
+private:
+    // Implementation note:
+    //  VisualAge 11.1 seems to have problems if the following two classes are
+    // defined out-of-body.
+    //                                        (03.11.2010.) (Domagoj Saric)
+    class safe_mover_base : noncopyable
     {
-        BOOST_ASSERT( emptyFunctionToMoveTo.p_vtable_ == &empty_handler_vtable_ );
-        move( functionToGuard, emptyFunctionToMoveTo, empty_handler_vtable_ );
-    }
+    protected:
+        typedef detail::function::vtable          vtable;
+        typedef detail::function::function_buffer functor;
+
+    protected:
+        safe_mover_base( function_base & functionToGuard, function_base & emptyFunctionToMoveTo )
+            :
+            pFunctionToRestoreTo  ( &functionToGuard                   ),
+            emptyFunctionToMoveTo_( emptyFunctionToMoveTo              ),
+            empty_handler_vtable_ ( emptyFunctionToMoveTo.get_vtable() )
+        {
+            BOOST_ASSERT( emptyFunctionToMoveTo.p_vtable_ == &empty_handler_vtable_ );
+            move( functionToGuard, emptyFunctionToMoveTo, empty_handler_vtable_ );
+        }
 
-    ~safe_mover_base() {}
+        ~safe_mover_base() {}
 
-public:
-    void cancel() { BOOST_ASSERT( pFunctionToRestoreTo ); pFunctionToRestoreTo = 0; }
+    public:
+        void cancel() { BOOST_ASSERT( pFunctionToRestoreTo ); pFunctionToRestoreTo = 0; }
 
-    static void move( function_base & source, function_base & destination, vtable const & empty_handler_vtable )
-    {
-        source.get_vtable().move( source.functor_, destination.functor_ );
-        destination.p_vtable_ = source.p_vtable_;
-        source     .p_vtable_ = &empty_handler_vtable;
-    }
+        static void move( function_base & source, function_base & destination, vtable const & empty_handler_vtable )
+        {
+            source.get_vtable().move( source.functor_, destination.functor_ );
+            destination.p_vtable_ = source.p_vtable_;
+            source     .p_vtable_ = &empty_handler_vtable;
+        }
 
-protected:
-    function_base * pFunctionToRestoreTo  ;
-    function_base & emptyFunctionToMoveTo_;
-    vtable const  & empty_handler_vtable_ ;
-};
+    protected:
+        function_base * pFunctionToRestoreTo  ;
+        function_base & emptyFunctionToMoveTo_;
+        vtable const  & empty_handler_vtable_ ;
+    };
 
 
-// ...if the is_stateless<EmptyHandler> requirement sticks this will not need
-// to be a template...
-template <class EmptyHandler>
-class function_base::safe_mover : public safe_mover_base
-{
-public:
-    safe_mover( function_base & functionToGuard, function_base & emptyFunctionToMoveTo )
-        :
-        safe_mover_base( functionToGuard, emptyFunctionToMoveTo ) {}
-    ~safe_mover()
+    // ...if the is_stateless<EmptyHandler> requirement sticks this will not need
+    // to be a template...
+    template <class EmptyHandler>
+    class safe_mover : public safe_mover_base
     {
-        if ( pFunctionToRestoreTo )
+    public:
+        safe_mover( function_base & functionToGuard, function_base & emptyFunctionToMoveTo )
+            :
+            safe_mover_base( functionToGuard, emptyFunctionToMoveTo ) {}
+        ~safe_mover()
         {
-            cleaner<EmptyHandler> guard( *pFunctionToRestoreTo, empty_handler_vtable_ );
-            move( emptyFunctionToMoveTo_, *pFunctionToRestoreTo, empty_handler_vtable_ );
-            guard.cancel();
+            if ( pFunctionToRestoreTo )
+            {
+                cleaner<EmptyHandler> guard( *pFunctionToRestoreTo, empty_handler_vtable_ );
+                move( emptyFunctionToMoveTo_, *pFunctionToRestoreTo, empty_handler_vtable_ );
+                guard.cancel();
+            }
         }
-    }
-};
-
+    };
+}; // class function_base
 
 template <class EmptyHandler>
 void function_base::swap( function_base & other, detail::function::vtable const & empty_handler_vtable )
@@ -1466,7 +1469,7 @@
     {
         throw_bad_call();
         #ifndef BF_HAS_NORETURN
-            return get_default_value<result_type>( is_reference<result_type>() );
+            return detail::function::get_default_value<result_type>( is_reference<result_type>() );
         #endif // BOOST_MSVC
     }
 };