$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: ramey_at_[hidden]
Date: 2007-11-01 16:24:37
Author: ramey
Date: 2007-11-01 16:24:36 EDT (Thu, 01 Nov 2007)
New Revision: 40660
URL: http://svn.boost.org/trac/boost/changeset/40660
Log:
passing all msvc and gcc tests
except gcc(release) test_no_rtti and test_shared_ptr132
Text files modified: 
   branches/serialization_next_release/boost/boost/serialization/base_object.hpp                |    77 +++++++++++++++++++++------------------ 
   branches/serialization_next_release/boost/boost/serialization/config.hpp                     |    66 +++++++++++++++++----------------       
   branches/serialization_next_release/boost/boost/serialization/export.hpp                     |     8 +--                                     
   branches/serialization_next_release/boost/boost/serialization/extended_type_info.hpp         |     2                                         
   branches/serialization_next_release/boost/boost/serialization/extended_type_info_no_rtti.hpp |     9 +---                                    
   branches/serialization_next_release/boost/boost/serialization/extended_type_info_typeid.hpp  |    44 +++++++++-------------                  
   branches/serialization_next_release/boost/boost/serialization/void_cast.hpp                  |    72 ++++++++++++++++++------------------    
   branches/serialization_next_release/boost/boost/serialization/void_cast_fwd.hpp              |     2 +                                       
   8 files changed, 139 insertions(+), 141 deletions(-)
Modified: branches/serialization_next_release/boost/boost/serialization/base_object.hpp
==============================================================================
--- branches/serialization_next_release/boost/boost/serialization/base_object.hpp	(original)
+++ branches/serialization_next_release/boost/boost/serialization/base_object.hpp	2007-11-01 16:24:36 EDT (Thu, 01 Nov 2007)
@@ -25,12 +25,15 @@
 
 #include <boost/mpl/eval_if.hpp>
 #include <boost/mpl/int.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+
 #include <boost/type_traits/is_base_and_derived.hpp>
 #include <boost/type_traits/is_pointer.hpp>
 #include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_polymorphic.hpp>
 
 #include <boost/static_assert.hpp>
-#include <boost/serialization/type_info_implementation.hpp>
 #include <boost/serialization/force_include.hpp>
 #include <boost/serialization/void_cast_fwd.hpp>
 
@@ -39,40 +42,44 @@
 
 namespace detail
 {
-// only register void casts if the types are polymorphic
-  template<class Base, class Derived>
-  struct base_register
-  {
-      static void const* execute(mpl::false_) { return 0; }
-
-      static void const* execute(mpl::true_)
-      {
-          return &void_cast_register((Derived const*)0, (Base const*)0);
-      }
-            
-      static void const* invoke()
-      {
-          typedef mpl::bool_<
-              type_info_implementation<Base>::type::is_polymorphic::value
-          > is_polymorphic;
-          
-          return execute(is_polymorphic());
-      }
-  };
-
-  // get the base type for a given derived type
-  // preserving the const-ness
-  template<class B, class D>
-  struct base_cast
-  {
-      typedef BOOST_DEDUCED_TYPENAME
-      mpl::if_<
-          is_const<D>,
-          const B,
-          B
-      >::type type;
-      BOOST_STATIC_ASSERT(is_const<type>::value == is_const<D>::value);
-  };
+    // get the base type for a given derived type
+    // preserving the const-ness
+    template<class B, class D>
+    struct base_cast
+    {
+        typedef BOOST_DEDUCED_TYPENAME
+        mpl::if_<
+            is_const<D>,
+            const B,
+            B
+        >::type type;
+        BOOST_STATIC_ASSERT(is_const<type>::value == is_const<D>::value);
+    };
+
+    // only register void casts if the types are polymorphic
+    template<class Base, class Derived>
+    struct base_register
+    {
+        struct polymorphic {
+            static void const * invoke(){
+                return &void_cast_register((Derived const*)0, (Base const*)0);
+            }
+        };
+        struct non_polymorphic {
+            static void const * invoke(){
+                return 0;
+            }
+        };
+        static void const * invoke(){
+            typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+                is_polymorphic<Base>,
+                mpl::identity<polymorphic>,
+                mpl::identity<non_polymorphic>
+            >::type type;
+            return type::invoke();
+        }
+    };
+
 } // namespace detail
 
 #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x560))
Modified: branches/serialization_next_release/boost/boost/serialization/config.hpp
==============================================================================
--- branches/serialization_next_release/boost/boost/serialization/config.hpp	(original)
+++ branches/serialization_next_release/boost/boost/serialization/config.hpp	2007-11-01 16:24:36 EDT (Thu, 01 Nov 2007)
@@ -1,10 +1,4 @@
-#ifndef BOOST_SERIALIZATION_CONFIG_HPP
-#define BOOST_SERIALIZATION_CONFIG_HPP
-
-// MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
+// note lack of include guards.  This is intentional
 
 //  config.hpp  ---------------------------------------------//
 
@@ -28,22 +22,34 @@
 // the same library as BOOST_ARCHIVE.  This could change some day in the
 // future
 
+// if BOOST_SERIALIZATION_DECL is defined undefine it now:
+#ifdef BOOST_SERIALIZATION_DECL
+    #undef BOOST_SERIALIZATION_DECL
+#endif
+
 #ifdef BOOST_HAS_DECLSPEC // defined in config system
 // we need to import/export our code only if the user has specifically
 // asked for it by defining either BOOST_ALL_DYN_LINK if they want all boost
 // libraries to be dynamically linked, or BOOST_SERIALIZATION_DYN_LINK
 // if they want just this one to be dynamically liked:
 #if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SERIALIZATION_DYN_LINK)
-#define BOOST_DYN_LINK
-// export if this is our own source, otherwise import:
-#if defined(BOOST_SERIALIZATION_SOURCE)
-    #if defined(BOOST_MSVC) || defined(BOOST_INTEL_WIN) || defined(__MWERKS__)
-    #define BOOST_SERIALIZATION_DECL(T) __declspec(dllexport) T
-    #else
-    #define BOOST_SERIALIZATION_DECL(T) T __declspec(dllexport)
+    #if !defined(BOOST_DYN_LINK)
+        #define BOOST_DYN_LINK
     #endif
-    #pragma message( "BOOST_SERIALIZATION_DECL __declspec(dllexport)" )
-#endif // defined(BOOST_SERIALIZATION_SOURCE)
+    // export if this is our own source, otherwise import:
+    #if defined(BOOST_SERIALIZATION_SOURCE)
+        #if defined(__BORLANDC__)
+            #define BOOST_SERIALIZATION_DECL(T) T __export
+        #else
+            #define BOOST_SERIALIZATION_DECL(T) __declspec(dllexport) T
+        #endif
+    #else
+        #if defined(__BORLANDC__)
+            #define BOOST_SERIALIZATION_DECL(T) T __import
+        #else
+            #define BOOST_SERIALIZATION_DECL(T) __declspec(dllimport) T
+        #endif
+    #endif // defined(BOOST_SERIALIZATION_SOURCE)
 #endif // defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SERIALIZATION_DYN_LINK)
 #endif // BOOST_HAS_DECLSPEC
 
@@ -55,20 +61,16 @@
 //  enable automatic library variant selection  ------------------------------// 
 
 #if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_SERIALIZATION_NO_LIB) \
-&& !defined(BOOST_SERIALIZATION_SOURCE) \
-&& !defined(BOOST_ARCHIVE_SOURCE) && !defined(BOOST_WARCHIVE_SOURCE)
-//
-// Set the name of our library, this will get undef'ed by auto_link.hpp
-// once it's done with it:
-//
-#define BOOST_LIB_NAME boost_serialization
-//
-// And include the header that does the work:
-//
-#include <boost/config/auto_link.hpp>
-
-#endif  // !defined(BOOST_SERIALIZATION_SOURCE) && !defined(BOOST_ARCHIVE_SOURCE)
-
-//----------------------------------------------------------------------------// 
+&&  !defined(BOOST_ARCHIVE_SOURCE) && !defined(BOOST_WARCHIVE_SOURCE)  \
+&&  !defined(BOOST_SERIALIZATION_SOURCE)
+    //
+    // Set the name of our library, this will get undef'ed by auto_link.hpp
+    // once it's done with it:
+    //
+    #define BOOST_LIB_NAME boost_serialization
+    //
+    // And include the header that does the work:
+    //
+    #include <boost/config/auto_link.hpp>
 
-#endif // BOOST_SERIALIZATION_CONFIG_HPP
+#endif  
Modified: branches/serialization_next_release/boost/boost/serialization/export.hpp
==============================================================================
--- branches/serialization_next_release/boost/boost/serialization/export.hpp	(original)
+++ branches/serialization_next_release/boost/boost/serialization/export.hpp	2007-11-01 16:24:36 EDT (Thu, 01 Nov 2007)
@@ -79,9 +79,8 @@
     const guid_initializer & export_guid(char const* key)
     {
         assert(NULL != key);
-        boost::serialization::singleton<
-            boost::serialization::type_info_implementation<T>::type
-        >::get_mutable_instance().key_register(key);
+        boost::serialization::type_info_implementation<T>::type
+            ::get_mutable_instance().key_register(key);
 
         // generates the statically-initialized objects whose constructors
         // register the information allowing serialization of T objects
@@ -182,8 +181,7 @@
 // need to export it.
 #define BOOST_CLASS_EXPORT_CHECK(T)                              \
     BOOST_STATIC_WARNING(                                        \
-        boost::serialization::type_info_implementation< T >      \
-            ::type::is_polymorphic::value                        \
+        boost::is_polymorphic<U>::value                          \
     );                                                           \
     /**/
 
Modified: branches/serialization_next_release/boost/boost/serialization/extended_type_info.hpp
==============================================================================
--- branches/serialization_next_release/boost/boost/serialization/extended_type_info.hpp	(original)
+++ branches/serialization_next_release/boost/boost/serialization/extended_type_info.hpp	2007-11-01 16:24:36 EDT (Thu, 01 Nov 2007)
@@ -47,7 +47,7 @@
     #if defined(__GNUC__)
     virtual
     #endif
-    virtual ~extended_type_info();
+    ~extended_type_info();
 public:
     void key_register(const char *key);
     const char * get_key() const {
Modified: branches/serialization_next_release/boost/boost/serialization/extended_type_info_no_rtti.hpp
==============================================================================
--- branches/serialization_next_release/boost/boost/serialization/extended_type_info_no_rtti.hpp	(original)
+++ branches/serialization_next_release/boost/boost/serialization/extended_type_info_no_rtti.hpp	2007-11-01 16:24:36 EDT (Thu, 01 Nov 2007)
@@ -22,6 +22,7 @@
 #include <boost/type_traits/is_const.hpp>
 
 #include <boost/serialization/extended_type_info.hpp>
+#include <boost/serialization/singleton.hpp>
 #include <boost/mpl/bool.hpp>
 
 #include <boost/config/abi_prefix.hpp> // must be the last header
@@ -38,14 +39,10 @@
 
 template<class T>
 class extended_type_info_no_rtti : 
-    public extended_type_info
+    public extended_type_info,
+    public singleton<extended_type_info_no_rtti<T> >
 {
 public:
-    struct is_polymorphic
-    {
-        typedef boost::mpl::bool_<true> type;
-        BOOST_STATIC_CONSTANT(bool, value = is_polymorphic::type::value);
-    };
     // private constructor to inhibit any existence other than the 
     // static one
     extended_type_info_no_rtti(){}
Modified: branches/serialization_next_release/boost/boost/serialization/extended_type_info_typeid.hpp
==============================================================================
--- branches/serialization_next_release/boost/boost/serialization/extended_type_info_typeid.hpp	(original)
+++ branches/serialization_next_release/boost/boost/serialization/extended_type_info_typeid.hpp	2007-11-01 16:24:36 EDT (Thu, 01 Nov 2007)
@@ -23,11 +23,13 @@
 
 //#include <boost/static_warning.hpp>
 #include <boost/static_assert.hpp>
+#include <boost/static_warning.hpp>
 #include <boost/type_traits/is_const.hpp>
 #include <boost/type_traits/is_polymorphic.hpp>
 #include <boost/preprocessor/stringize.hpp>
 
 #include <boost/serialization/extended_type_info.hpp>
+#include <boost/serialization/singleton.hpp>
 
 #include <boost/config/abi_prefix.hpp> // must be the last header
 #ifdef BOOST_MSVC
@@ -47,7 +49,7 @@
     extended_type_info_typeid_0() :
         m_ti(NULL)
     {}
-    virtual ~extended_type_info_typeid_0();
+    ~extended_type_info_typeid_0();
     void type_register(const std::type_info & ti);
     static const extended_type_info *
     get_derived_extended_type_info(const std::type_info & ti);
@@ -57,37 +59,35 @@
     }
 };
 
+} // namespace detail
+
 ///////////////////////////////////////////////////////////////////////////////
 // layer to fold T and const T into the same table entry.
 template<class T>
-class extended_type_info_typeid_1 : 
-    public detail::extended_type_info_typeid_0
+class extended_type_info_typeid : 
+    public detail::extended_type_info_typeid_0,
+    public singleton<extended_type_info_typeid<const T> >
 {
 protected:
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x560))
+public:
+#endif
+public:
     // protected constructor to inhibit any existence other than the 
     // static one
-    extended_type_info_typeid_1() :
+    extended_type_info_typeid() :
         detail::extended_type_info_typeid_0()
     {
         type_register(typeid(T));
     }
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x560))
-public:
-#endif
-    ~extended_type_info_typeid_1(){}
-public:
-    struct is_polymorphic
-    {
-        typedef BOOST_DEDUCED_TYPENAME boost::is_polymorphic<T>::type type;
-        BOOST_STATIC_CONSTANT(bool, value = is_polymorphic::type::value);
-    };
+    ~extended_type_info_typeid(){}
     const extended_type_info *
     get_derived_extended_type_info(const T & t) const {
         // note: this implementation - based on usage of typeid (rtti)
-        // only works if the class has at least one virtual function.
-//      BOOST_STATIC_WARNING(
-//          static_cast<bool>(is_polymorphic::value)
-//      );
+        // only does something if the class has at least one virtual function.
+        BOOST_STATIC_WARNING(
+            static_cast<bool>(boost::is_polymorphic<T>::value)
+        );
         return 
             detail::extended_type_info_typeid_0::get_derived_extended_type_info(
                 typeid(t)
@@ -95,14 +95,6 @@
     }
 };
 
-} // namespace detail
-
-///////////////////////////////////////////////////////////////////////////////
-template<class T>
-class extended_type_info_typeid : 
-    public detail::extended_type_info_typeid_1<const T>
-{};
-
 } // namespace serialization
 } // namespace boost
 
Modified: branches/serialization_next_release/boost/boost/serialization/void_cast.hpp
==============================================================================
--- branches/serialization_next_release/boost/boost/serialization/void_cast.hpp	(original)
+++ branches/serialization_next_release/boost/boost/serialization/void_cast.hpp	2007-11-01 16:24:36 EDT (Thu, 01 Nov 2007)
@@ -18,12 +18,11 @@
 //  See http://www.boost.org for updates, documentation, and revision history.
 
 #include <boost/smart_cast.hpp>
-
-#include <boost/serialization/config.hpp>
 #include <boost/serialization/singleton.hpp>
 #include <boost/serialization/force_include.hpp>
 #include <boost/serialization/type_info_implementation.hpp>
 
+#include <boost/serialization/config.hpp>
 #include <boost/config/abi_prefix.hpp> // must be the last header
 
 #ifdef BOOST_MSVC
@@ -34,7 +33,7 @@
 namespace boost { 
 namespace serialization { 
 
-class BOOST_SERIALIZATION_DECL(BOOST_PP_EMPTY()) extended_type_info;
+//class BOOST_SERIALIZATION_DECL(BOOST_PP_EMPTY()) extended_type_info;
 
 // Given a void *, assume that it really points to an instance of one type
 // and alter it so that it would point to an instance of a related type.
@@ -43,40 +42,40 @@
 
 BOOST_SERIALIZATION_DECL(void const *)
 void_upcast(
-    extended_type_info const & derived_type,  
-    extended_type_info const & base_type, 
+    extended_type_info const & derived,  
+    extended_type_info const & base, 
     void const * const t
 );
 
 inline void *
 void_upcast(
-    extended_type_info const & derived_type_,
-    extended_type_info const & base_type_,
+    extended_type_info const & derived,
+    extended_type_info const & base,
     void * const t 
 ){
     return const_cast<void*>(void_upcast(
-        derived_type_, 
-        base_type_, 
+        derived, 
+        base, 
         const_cast<void const *>(t)
     ));
 }
 
 BOOST_SERIALIZATION_DECL(void const *)
 void_downcast(
-    extended_type_info const & derived_type,  
-    extended_type_info const & base_type, 
+    extended_type_info const & derived,  
+    extended_type_info const & base, 
     void const * const t
 );
 
 inline void *
 void_downcast(
-    extended_type_info const & derived_type,
-    extended_type_info const & base_type,
+    extended_type_info const & derived,
+    extended_type_info const & base,
     void * const t 
 ){
     return const_cast<void*>(void_downcast(
-        derived_type, 
-        base_type, 
+        derived, 
+        base, 
         const_cast<void const *>(t)
     ));
 }
@@ -89,27 +88,27 @@
     friend 
     BOOST_SERIALIZATION_DECL(void const *)
     boost::serialization::void_upcast(
-        const extended_type_info & derived,
-        const extended_type_info & base,
-        const void * t
+        extended_type_info const & derived,
+        extended_type_info const & base,
+        void const * const
     );
     friend 
     BOOST_SERIALIZATION_DECL(void const *)  
     boost::serialization::void_downcast(
-        const extended_type_info & derived,
-        const extended_type_info & base,
-        const void * t
+        extended_type_info const & derived,
+        extended_type_info const & base,
+        void const * const
     );
     // Data members
     const extended_type_info & m_derived;
     const extended_type_info & m_base;
     // each derived class must re-implement these;
-    virtual void const * upcast(void const * t) const = 0;
-    virtual void const * downcast(void const * t) const = 0;
+    virtual void const * upcast(void const * const t) const = 0;
+    virtual void const * downcast(void const * const t) const = 0;
 protected:
-    BOOST_SERIALIZATION_DECL(void)
+    void
     static_register() const;
-    BOOST_SERIALIZATION_DECL(void)
+    void
     static_unregister() const;
 public:
     // Constructor
@@ -120,42 +119,42 @@
     virtual ~void_caster(){};
 private:
     // cw 8.3 requires this!!
-    void_caster& operator=(void_caster const&);
+    void_caster& operator=(void_caster const &);
 };
 
 template <class Derived, class Base>
 class void_caster_primitive : 
     public void_caster
 {
-    virtual void const* downcast( void const * t ) const {
+    virtual void const * downcast(void const * const t) const {
         const Derived * d = boost::smart_cast<const Derived *, const Base *>(
             static_cast<const Base *>(t)
         );
         return d;
     }
-    virtual void const* upcast(void const * t) const {
+    virtual void const * upcast(void const * const t) const {
         const Base * b = boost::smart_cast<const Base *, const Derived *>(
             static_cast<const Derived *>(t)
         );
         return b;
     }
 public:
-    BOOST_DLLEXPORT void_caster_primitive() BOOST_USED;
-    BOOST_DLLEXPORT ~void_caster_primitive() BOOST_USED;
+    void_caster_primitive();
+    ~void_caster_primitive();
 };
 
 template <class Derived, class Base>
-BOOST_DLLEXPORT void_caster_primitive<Derived, Base>::void_caster_primitive() :
+void_caster_primitive<Derived, Base>::void_caster_primitive() :
     void_caster( 
-        singleton<type_info_implementation<Derived>::type>::get_const_instance(), 
-        singleton<type_info_implementation<Base>::type>::get_const_instance()
+        type_info_implementation<Derived>::type::get_const_instance(), 
+        type_info_implementation<Base>::type::get_const_instance()
     )
 {
     static_register();
 }
 
 template <class Derived, class Base>
-BOOST_DLLEXPORT void_caster_primitive<Derived, Base>::~void_caster_primitive(){
+void_caster_primitive<Derived, Base>::~void_caster_primitive(){
     static_unregister();
 }
 
@@ -171,11 +170,12 @@
     const Derived * dnull, 
     const Base * bnull
 ) BOOST_USED;
+
 template<class Derived, class Base>
 BOOST_DLLEXPORT 
 inline const void_cast_detail::void_caster & void_cast_register(
-    const Derived * /* dnull = NULL */, 
-    const Base * /* bnull = NULL */
+    Derived const * /* dnull = NULL */, 
+    Base const * /* bnull = NULL */
 ){
     return singleton<void_cast_detail::void_caster_primitive<
         Derived, Base
Modified: branches/serialization_next_release/boost/boost/serialization/void_cast_fwd.hpp
==============================================================================
--- branches/serialization_next_release/boost/boost/serialization/void_cast_fwd.hpp	(original)
+++ branches/serialization_next_release/boost/boost/serialization/void_cast_fwd.hpp	2007-11-01 16:24:36 EDT (Thu, 01 Nov 2007)
@@ -17,6 +17,8 @@
 
 //  See http://www.boost.org for updates, documentation, and revision history.
 
+#include <boost/serialization/force_include.hpp>
+
 namespace boost {
 namespace serialization {
 namespace void_cast_detail{