$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r86723 - in branches/release/boost/archive: . detail impl iterators
From: ramey_at_[hidden]
Date: 2013-11-16 14:31:13
Author: ramey
Date: 2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)
New Revision: 86723
URL: http://svn.boost.org/trac/boost/changeset/86723
Log:
merge trunk to release
Properties modified: 
   branches/release/boost/archive/   (props changed)
Text files modified: 
   branches/release/boost/archive/add_facet.hpp                         |     2                                         
   branches/release/boost/archive/archive_exception.hpp                 |     2                                         
   branches/release/boost/archive/basic_archive.hpp                     |     2                                         
   branches/release/boost/archive/basic_binary_iarchive.hpp             |    14 +--                                     
   branches/release/boost/archive/basic_binary_iprimitive.hpp           |     4                                         
   branches/release/boost/archive/basic_binary_oarchive.hpp             |    14 +--                                     
   branches/release/boost/archive/basic_binary_oprimitive.hpp           |     2                                         
   branches/release/boost/archive/basic_streambuf_locale_saver.hpp      |     2                                         
   branches/release/boost/archive/basic_text_iarchive.hpp               |    14 +--                                     
   branches/release/boost/archive/basic_text_iprimitive.hpp             |     2                                         
   branches/release/boost/archive/basic_text_oarchive.hpp               |    13 +--                                     
   branches/release/boost/archive/basic_text_oprimitive.hpp             |    77 +++++++++++++++++-----                  
   branches/release/boost/archive/basic_xml_archive.hpp                 |     2                                         
   branches/release/boost/archive/basic_xml_iarchive.hpp                |    16 +--                                     
   branches/release/boost/archive/basic_xml_oarchive.hpp                |    15 +--                                     
   branches/release/boost/archive/binary_iarchive.hpp                   |     4                                         
   branches/release/boost/archive/binary_iarchive_impl.hpp              |     6 +                                       
   branches/release/boost/archive/binary_oarchive.hpp                   |     2                                         
   branches/release/boost/archive/binary_oarchive_impl.hpp              |     6 +                                       
   branches/release/boost/archive/binary_wiarchive.hpp                  |     2                                         
   branches/release/boost/archive/binary_woarchive.hpp                  |     2                                         
   branches/release/boost/archive/codecvt_null.hpp                      |     2                                         
   branches/release/boost/archive/detail/archive_serializer_map.hpp     |     2                                         
   branches/release/boost/archive/detail/auto_link_archive.hpp          |     2                                         
   branches/release/boost/archive/detail/auto_link_warchive.hpp         |     2                                         
   branches/release/boost/archive/detail/basic_archive_impl.hpp         |     2                                         
   branches/release/boost/archive/detail/basic_config.hpp               |     2                                         
   branches/release/boost/archive/detail/basic_iarchive.hpp             |     9 --                                      
   branches/release/boost/archive/detail/basic_iserializer.hpp          |     2                                         
   branches/release/boost/archive/detail/basic_oarchive.hpp             |    10 --                                      
   branches/release/boost/archive/detail/basic_oserializer.hpp          |     2                                         
   branches/release/boost/archive/detail/basic_pointer_iserializer.hpp  |     2                                         
   branches/release/boost/archive/detail/basic_pointer_oserializer.hpp  |     2                                         
   branches/release/boost/archive/detail/basic_serializer.hpp           |     2                                         
   branches/release/boost/archive/detail/basic_serializer_map.hpp       |     2                                         
   branches/release/boost/archive/detail/check.hpp                      |     2                                         
   branches/release/boost/archive/detail/common_iarchive.hpp            |     2                                         
   branches/release/boost/archive/detail/common_oarchive.hpp            |     2                                         
   branches/release/boost/archive/detail/decl.hpp                       |     2                                         
   branches/release/boost/archive/detail/interface_iarchive.hpp         |     2                                         
   branches/release/boost/archive/detail/interface_oarchive.hpp         |     2                                         
   branches/release/boost/archive/detail/iserializer.hpp                |   134 ++++++++++++++++++++++++++++++++++----- 
   branches/release/boost/archive/detail/oserializer.hpp                |     2                                         
   branches/release/boost/archive/detail/polymorphic_iarchive_route.hpp |     2                                         
   branches/release/boost/archive/detail/polymorphic_oarchive_route.hpp |     2                                         
   branches/release/boost/archive/detail/utf8_codecvt_facet.hpp         |    20 +++--                                   
   branches/release/boost/archive/dinkumware.hpp                        |     2                                         
   branches/release/boost/archive/impl/basic_binary_iarchive.ipp        |     5 -                                       
   branches/release/boost/archive/impl/basic_binary_iprimitive.ipp      |     1                                         
   branches/release/boost/archive/impl/basic_binary_oprimitive.ipp      |     1                                         
   branches/release/boost/archive/impl/basic_text_iarchive.ipp          |     5 -                                       
   branches/release/boost/archive/impl/basic_text_oprimitive.ipp        |     1                                         
   branches/release/boost/archive/impl/basic_xml_grammar.hpp            |     7 -                                       
   branches/release/boost/archive/impl/xml_oarchive_impl.ipp            |     2                                         
   branches/release/boost/archive/impl/xml_wiarchive_impl.ipp           |    13 ++                                      
   branches/release/boost/archive/impl/xml_woarchive_impl.ipp           |    11 ++                                      
   branches/release/boost/archive/iterators/base64_exception.hpp        |     2                                         
   branches/release/boost/archive/iterators/base64_from_binary.hpp      |     2                                         
   branches/release/boost/archive/iterators/binary_from_base64.hpp      |     2                                         
   branches/release/boost/archive/iterators/dataflow.hpp                |     2                                         
   branches/release/boost/archive/iterators/dataflow_exception.hpp      |     2                                         
   branches/release/boost/archive/iterators/escape.hpp                  |     2                                         
   branches/release/boost/archive/iterators/head_iterator.hpp           |     2                                         
   branches/release/boost/archive/iterators/insert_linebreaks.hpp       |     2                                         
   branches/release/boost/archive/iterators/istream_iterator.hpp        |     2                                         
   branches/release/boost/archive/iterators/mb_from_wchar.hpp           |     2                                         
   branches/release/boost/archive/iterators/ostream_iterator.hpp        |     2                                         
   branches/release/boost/archive/iterators/remove_whitespace.hpp       |     7 -                                       
   branches/release/boost/archive/iterators/transform_width.hpp         |    11 ++                                      
   branches/release/boost/archive/iterators/unescape.hpp                |     2                                         
   branches/release/boost/archive/iterators/wchar_from_mb.hpp           |     2                                         
   branches/release/boost/archive/iterators/xml_escape.hpp              |     2                                         
   branches/release/boost/archive/iterators/xml_unescape.hpp            |     2                                         
   branches/release/boost/archive/iterators/xml_unescape_exception.hpp  |     2                                         
   branches/release/boost/archive/polymorphic_binary_iarchive.hpp       |     2                                         
   branches/release/boost/archive/polymorphic_binary_oarchive.hpp       |     2                                         
   branches/release/boost/archive/polymorphic_iarchive.hpp              |     2                                         
   branches/release/boost/archive/polymorphic_oarchive.hpp              |     2                                         
   branches/release/boost/archive/polymorphic_text_iarchive.hpp         |     2                                         
   branches/release/boost/archive/polymorphic_text_oarchive.hpp         |     2                                         
   branches/release/boost/archive/polymorphic_text_wiarchive.hpp        |     2                                         
   branches/release/boost/archive/polymorphic_text_woarchive.hpp        |     2                                         
   branches/release/boost/archive/polymorphic_xml_iarchive.hpp          |     2                                         
   branches/release/boost/archive/polymorphic_xml_oarchive.hpp          |     2                                         
   branches/release/boost/archive/polymorphic_xml_wiarchive.hpp         |     2                                         
   branches/release/boost/archive/polymorphic_xml_woarchive.hpp         |     2                                         
   branches/release/boost/archive/shared_ptr_helper.hpp                 |     2                                         
   branches/release/boost/archive/text_iarchive.hpp                     |     6 +                                       
   branches/release/boost/archive/text_oarchive.hpp                     |     6 +                                       
   branches/release/boost/archive/text_wiarchive.hpp                    |     6 +                                       
   branches/release/boost/archive/text_woarchive.hpp                    |     6 +                                       
   branches/release/boost/archive/tmpdir.hpp                            |     2                                         
   branches/release/boost/archive/wcslen.hpp                            |     2                                         
   branches/release/boost/archive/xml_archive_exception.hpp             |     2                                         
   branches/release/boost/archive/xml_iarchive.hpp                      |     6 +                                       
   branches/release/boost/archive/xml_oarchive.hpp                      |     6 +                                       
   branches/release/boost/archive/xml_wiarchive.hpp                     |     6 +                                       
   branches/release/boost/archive/xml_woarchive.hpp                     |     2                                         
   98 files changed, 367 insertions(+), 225 deletions(-)
Modified: branches/release/boost/archive/add_facet.hpp
==============================================================================
--- branches/release/boost/archive/add_facet.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/add_facet.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_ADD_FACET_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/archive_exception.hpp
==============================================================================
--- branches/release/boost/archive/archive_exception.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/archive_exception.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/basic_archive.hpp
==============================================================================
--- branches/release/boost/archive/basic_archive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/basic_archive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BASIC_ARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/basic_binary_iarchive.hpp
==============================================================================
--- branches/release/boost/archive/basic_binary_iarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/basic_binary_iarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BASIC_BINARY_IARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -44,6 +44,10 @@
 namespace boost { 
 namespace archive {
 
+namespace detail {
+    template<class Archive> class interface_iarchive;
+} // namespace detail
+
 /////////////////////////////////////////////////////////////////////////
 // class basic_binary_iarchive - read serialized objects from a input binary stream
 template<class Archive>
@@ -51,15 +55,7 @@
     public detail::common_iarchive<Archive>
 {
 protected:
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-public:
-#elif defined(BOOST_MSVC)
-    // for some inexplicable reason insertion of "class" generates compile erro
-    // on msvc 7.1
-    friend detail::interface_iarchive<Archive>;
-#else
     friend class detail::interface_iarchive<Archive>;
-#endif
     // intermediate level to support override of operators
     // fot templates in the absence of partial function 
     // template ordering. If we get here pass to base class
Modified: branches/release/boost/archive/basic_binary_iprimitive.hpp
==============================================================================
--- branches/release/boost/archive/basic_binary_iprimitive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/basic_binary_iprimitive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BINARY_IPRIMITIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -178,7 +178,7 @@
             boost::serialization::throw_exception(
                 archive_exception(archive_exception::input_stream_error)
             );
-        std::memcpy(static_cast<char*>(address) + (count - s), &t, s);
+        std::memcpy(static_cast<char*>(address) + (count - s), &t, static_cast<std::size_t>(s));
     }
 }
 
Modified: branches/release/boost/archive/basic_binary_oarchive.hpp
==============================================================================
--- branches/release/boost/archive/basic_binary_oarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/basic_binary_oarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BASIC_BINARY_OARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -46,6 +46,10 @@
 namespace boost {
 namespace archive {
 
+namespace detail {
+    template<class Archive> class interface_oarchive;
+} // namespace detail
+
 //////////////////////////////////////////////////////////////////////
 // class basic_binary_oarchive - write serialized objects to a binary output stream
 // note: this archive has no pretensions to portability.  Archive format
@@ -59,15 +63,7 @@
     public archive::detail::common_oarchive<Archive>
 {
 protected:
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-public:
-#elif defined(BOOST_MSVC)
-    // for some inexplicable reason insertion of "class" generates compile erro
-    // on msvc 7.1
-    friend detail::interface_oarchive<Archive>;
-#else
     friend class detail::interface_oarchive<Archive>;
-#endif
     // any datatype not specifed below will be handled by base class
     typedef detail::common_oarchive<Archive> detail_common_oarchive;
     template<class T>
Modified: branches/release/boost/archive/basic_binary_oprimitive.hpp
==============================================================================
--- branches/release/boost/archive/basic_binary_oprimitive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/basic_binary_oprimitive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BASIC_BINARY_OPRIMITIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/basic_streambuf_locale_saver.hpp
==============================================================================
--- branches/release/boost/archive/basic_streambuf_locale_saver.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/basic_streambuf_locale_saver.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BASIC_STREAMBUF_LOCALE_SAVER_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/basic_text_iarchive.hpp
==============================================================================
--- branches/release/boost/archive/basic_text_iarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/basic_text_iarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BASIC_TEXT_IARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -40,6 +40,10 @@
 namespace boost {
 namespace archive {
 
+namespace detail {
+    template<class Archive> class interface_iarchive;
+} // namespace detail
+
 /////////////////////////////////////////////////////////////////////////
 // class basic_text_iarchive - read serialized objects from a input text stream
 template<class Archive>
@@ -47,15 +51,7 @@
     public detail::common_iarchive<Archive>
 {
 protected:
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-public:
-#elif defined(BOOST_MSVC)
-    // for some inexplicable reason insertion of "class" generates compile erro
-    // on msvc 7.1
-    friend detail::interface_iarchive<Archive>;
-#else
     friend class detail::interface_iarchive<Archive>;
-#endif
     // intermediate level to support override of operators
     // fot templates in the absence of partial function 
     // template ordering
Modified: branches/release/boost/archive/basic_text_iprimitive.hpp
==============================================================================
--- branches/release/boost/archive/basic_text_iprimitive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/basic_text_iprimitive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/basic_text_oarchive.hpp
==============================================================================
--- branches/release/boost/archive/basic_text_oarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/basic_text_oarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BASIC_TEXT_OARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -42,6 +42,10 @@
 namespace boost {
 namespace archive {
 
+namespace detail {
+    template<class Archive> class interface_oarchive;
+} // namespace detail
+
 /////////////////////////////////////////////////////////////////////////
 // class basic_text_oarchive 
 template<class Archive>
@@ -49,13 +53,8 @@
     public detail::common_oarchive<Archive>
 {
 protected:
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
-|| BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x560))
+#if BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x560))
 public:
-#elif defined(BOOST_MSVC)
-    // for some inexplicable reason insertion of "class" generates compile erro
-    // on msvc 7.1
-    friend detail::interface_oarchive<Archive>;
 #else
     friend class detail::interface_oarchive<Archive>;
 #endif
Modified: branches/release/boost/archive/basic_text_oprimitive.hpp
==============================================================================
--- branches/release/boost/archive/basic_text_oprimitive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/basic_text_oprimitive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BASIC_TEXT_OPRIMITIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -26,13 +26,14 @@
 
 #include <iomanip>
 #include <locale>
-#include <boost/config/no_tr1/cmath.hpp> // isnan
 #include <boost/assert.hpp>
 #include <cstddef> // size_t
 
 #include <boost/config.hpp>
 #include <boost/static_assert.hpp>
 #include <boost/detail/workaround.hpp>
+#include <boost/io/ios_state.hpp>
+
 #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
 #include <boost/archive/dinkumware.hpp>
 #endif
@@ -46,6 +47,8 @@
 } // namespace std
 #endif
 
+#include <boost/type_traits/is_floating_point.hpp>
+#include <boost/mpl/bool.hpp>
 #include <boost/limits.hpp>
 #include <boost/integer.hpp>
 #include <boost/io/ios_state.hpp>
@@ -82,16 +85,6 @@
     > locale_saver;
     #endif
 
-    // default saving of primitives.
-    template<class T>
-    void save(const T &t){
-        if(os.fail())
-            boost::serialization::throw_exception(
-                archive_exception(archive_exception::output_stream_error)
-            );
-        os << t;
-    }
-
     /////////////////////////////////////////////////////////
     // fundamental types that need special treatment
     void save(const bool t){
@@ -123,26 +116,70 @@
         save(static_cast<int>(t));
     }
     #endif
-    void save(const float t)
-    {
-        // must be a user mistake - can't serialize un-initialized data
+
+    /////////////////////////////////////////////////////////
+    // saving of any types not listed above
+
+    template<class T>
+    void save_impl(const T &t, boost::mpl::bool_<false> &){
         if(os.fail())
             boost::serialization::throw_exception(
                 archive_exception(archive_exception::output_stream_error)
             );
-        os << std::setprecision(std::numeric_limits<float>::digits10 + 2);
         os << t;
     }
-    void save(const double t)
-    {
+
+    /////////////////////////////////////////////////////////
+    // floating point types need even more special treatment
+    // the following determines whether the type T is some sort
+    // of floating point type.  Note that we then assume that
+    // the stream << operator is defined on that type - if not
+    // we'll get a compile time error. This is meant to automatically
+    // support synthesized types which support floating point
+    // operations. Also it should handle compiler dependent types
+    // such long double.  Due to John Maddock.
+
+    template<class T>
+    struct is_float {
+        typedef BOOST_DEDUCED_TYPENAME mpl::bool_< 
+            boost::is_floating_point<T>::value 
+            || (std::numeric_limits<T>::is_specialized
+            && !std::numeric_limits<T>::is_integer
+            && !std::numeric_limits<T>::is_exact
+            && std::numeric_limits<T>::max_exponent) 
+        >::type type;
+    };
+
+    template<class T>
+    void save_impl(const T &t, boost::mpl::bool_<true> &){
         // must be a user mistake - can't serialize un-initialized data
         if(os.fail())
             boost::serialization::throw_exception(
                 archive_exception(archive_exception::output_stream_error)
             );
-        os << std::setprecision(std::numeric_limits<double>::digits10 + 2);
-        os << t;
+        // The formulae for the number of decimla digits required is given in
+        // http://www2.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1822.pdf
+        // which is derived from Kahan's paper:
+        // www.eecs.berkeley.edu/~wkahan/ieee754status/ieee754.ps
+        // const unsigned int digits = (std::numeric_limits<T>::digits * 3010) / 10000;
+        // note: I've commented out the above because I didn't get good results.  e.g.
+        // in one case I got a difference of 19 units.
+        #ifndef BOOST_NO_CXX11_NUMERIC_LIMITS
+            const unsigned int digits = std::numeric_limits<T>::max_digits10;
+        #else
+            const unsigned int digits = std::numeric_limits<T>::digits10 + 2;
+        #endif
+        os << std::setprecision(digits) << std::scientific << t;
     }
+
+    template<class T>
+    void save(const T & t){
+        boost::io::ios_flags_saver fs(os);
+        boost::io::ios_precision_saver ps(os);
+        BOOST_DEDUCED_TYPENAME is_float<T>::type tf;
+        save_impl(t, tf);
+    }
+
     BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
     basic_text_oprimitive(OStream & os, bool no_codecvt);
     BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) 
Modified: branches/release/boost/archive/basic_xml_archive.hpp
==============================================================================
--- branches/release/boost/archive/basic_xml_archive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/basic_xml_archive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BASIC_XML_TEXT_ARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/basic_xml_iarchive.hpp
==============================================================================
--- branches/release/boost/archive/basic_xml_iarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/basic_xml_iarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BASIC_XML_IARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -37,6 +37,10 @@
 namespace boost {
 namespace archive {
 
+namespace detail {
+    template<class Archive> class interface_iarchive;
+} // namespace detail
+
 /////////////////////////////////////////////////////////////////////////
 // class xml_iarchive - read serialized objects from a input text stream
 template<class Archive>
@@ -44,15 +48,7 @@
     public detail::common_iarchive<Archive>
 {
 protected:
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-public:
-#elif defined(BOOST_MSVC)
-    // for some inexplicable reason insertion of "class" generates compile erro
-    // on msvc 7.1
-    friend detail::interface_oarchive<Archive>;
-#else
-    friend class detail::interface_oarchive<Archive>;
-#endif
+    friend class detail::interface_iarchive<Archive>;
     unsigned int depth;
     BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
     load_start(const char *name);
Modified: branches/release/boost/archive/basic_xml_oarchive.hpp
==============================================================================
--- branches/release/boost/archive/basic_xml_oarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/basic_xml_oarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BASIC_XML_OARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -36,6 +36,10 @@
 namespace boost {
 namespace archive {
 
+namespace detail {
+    template<class Archive> class interface_oarchive;
+} // namespace detail
+
 //////////////////////////////////////////////////////////////////////
 // class basic_xml_oarchive - write serialized objects to a xml output stream
 template<class Archive>
@@ -43,17 +47,8 @@
     public detail::common_oarchive<Archive>
 {
 protected:
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-public:
-#elif defined(BOOST_MSVC)
-    // for some inexplicable reason insertion of "class" generates compile erro
-    // on msvc 7.1
-    friend detail::interface_oarchive<Archive>;
-    friend class save_access;
-#else
     friend class detail::interface_oarchive<Archive>;
     friend class save_access;
-#endif
     // special stuff for xml output
     unsigned int depth;
     bool indent_next;
Modified: branches/release/boost/archive/binary_iarchive.hpp
==============================================================================
--- branches/release/boost/archive/binary_iarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/binary_iarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BINARY_IARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -29,7 +29,7 @@
 namespace archive {
 
 // do not derive from the classes below.  If you want to extend this functionality
-// via inhertance, derived from text_iarchive_impl instead.  This will
+// via inhertance, derived from binary_iarchive_impl instead.  This will
 // preserve correct static polymorphism.
 
 // same as binary_iarchive below - without the shared_ptr_helper
Modified: branches/release/boost/archive/binary_iarchive_impl.hpp
==============================================================================
--- branches/release/boost/archive/binary_iarchive_impl.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/binary_iarchive_impl.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BINARY_IARCHIVE_IMPL_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -29,6 +29,10 @@
 namespace boost { 
 namespace archive {
 
+namespace detail {
+    template<class Archive> class interface_iarchive;
+} // namespace detail
+
 template<class Archive, class Elem, class Tr>
 class binary_iarchive_impl : 
     public basic_binary_iprimitive<Archive, Elem, Tr>,
Modified: branches/release/boost/archive/binary_oarchive.hpp
==============================================================================
--- branches/release/boost/archive/binary_oarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/binary_oarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BINARY_OARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/binary_oarchive_impl.hpp
==============================================================================
--- branches/release/boost/archive/binary_oarchive_impl.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/binary_oarchive_impl.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BINARY_OARCHIVE_IMPL_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -30,6 +30,10 @@
 namespace boost { 
 namespace archive {
 
+namespace detail {
+    template<class Archive> class interface_oarchive;
+} // namespace detail
+
 template<class Archive, class Elem, class Tr>
 class binary_oarchive_impl : 
     public basic_binary_oprimitive<Archive, Elem, Tr>,
Modified: branches/release/boost/archive/binary_wiarchive.hpp
==============================================================================
--- branches/release/boost/archive/binary_wiarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/binary_wiarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BINARY_WIARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/binary_woarchive.hpp
==============================================================================
--- branches/release/boost/archive/binary_woarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/binary_woarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BINARY_WOARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/codecvt_null.hpp
==============================================================================
--- branches/release/boost/archive/codecvt_null.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/codecvt_null.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_CODECVT_NULL_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/detail/archive_serializer_map.hpp
==============================================================================
--- branches/release/boost/archive/detail/archive_serializer_map.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/archive_serializer_map.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_SERIALIZER_MAP_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/detail/auto_link_archive.hpp
==============================================================================
--- branches/release/boost/archive/detail/auto_link_archive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/auto_link_archive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_DETAIL_AUTO_LINK_ARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/detail/auto_link_warchive.hpp
==============================================================================
--- branches/release/boost/archive/detail/auto_link_warchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/auto_link_warchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_DETAIL_AUTO_LINK_WARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/detail/basic_archive_impl.hpp
==============================================================================
--- branches/release/boost/archive/detail/basic_archive_impl.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/basic_archive_impl.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_DETAIL_BASIC_ARCHIVE_IMPL_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/detail/basic_config.hpp
==============================================================================
--- branches/release/boost/archive/detail/basic_config.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/basic_config.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_DETAIL_BASIC_CONFIG_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/detail/basic_iarchive.hpp
==============================================================================
--- branches/release/boost/archive/detail/basic_iarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/basic_iarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_DETAIL_BASIC_IARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -22,7 +22,6 @@
 #include <boost/config.hpp>
 #include <boost/noncopyable.hpp>
 
-#include <boost/type_traits/broken_compiler_spec.hpp>
 #include <boost/serialization/tracking_enum.hpp>
 #include <boost/archive/basic_archive.hpp>
 #include <boost/archive/detail/decl.hpp>
@@ -99,12 +98,6 @@
 } // namespace archive
 } // namespace boost
 
-// required by smart_cast for compilers not implementing 
-// partial template specialization
-BOOST_TT_BROKEN_COMPILER_SPEC(
-    boost::archive::detail::basic_iarchive  
-) 
-
 #include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
 
 #endif //BOOST_ARCHIVE_DETAIL_BASIC_IARCHIVE_HPP
Modified: branches/release/boost/archive/detail/basic_iserializer.hpp
==============================================================================
--- branches/release/boost/archive/detail/basic_iserializer.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/basic_iserializer.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_DETAIL_BASIC_ISERIALIZER_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/detail/basic_oarchive.hpp
==============================================================================
--- branches/release/boost/archive/detail/basic_oarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/basic_oarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BASIC_OARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -20,8 +20,6 @@
 #include <boost/config.hpp>
 #include <boost/noncopyable.hpp>
 
-#include <boost/type_traits/broken_compiler_spec.hpp>
-
 // can't use this - much as I'd like to as borland doesn't support it
 // #include <boost/scoped_ptr.hpp>
 
@@ -95,12 +93,6 @@
 } // namespace archive
 } // namespace boost
 
-// required by smart_cast for compilers not implementing 
-// partial template specialization
-BOOST_TT_BROKEN_COMPILER_SPEC(
-    boost::archive::detail::basic_oarchive
-)
-
 #include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
 
 #endif //BOOST_ARCHIVE_BASIC_OARCHIVE_HPP
Modified: branches/release/boost/archive/detail/basic_oserializer.hpp
==============================================================================
--- branches/release/boost/archive/detail/basic_oserializer.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/basic_oserializer.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_SERIALIZATION_BASIC_OSERIALIZER_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/detail/basic_pointer_iserializer.hpp
==============================================================================
--- branches/release/boost/archive/detail/basic_pointer_iserializer.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/basic_pointer_iserializer.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BASIC_POINTER_ISERIALIZER_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/detail/basic_pointer_oserializer.hpp
==============================================================================
--- branches/release/boost/archive/detail/basic_pointer_oserializer.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/basic_pointer_oserializer.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BASIC_POINTER_OSERIALIZER_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/detail/basic_serializer.hpp
==============================================================================
--- branches/release/boost/archive/detail/basic_serializer.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/basic_serializer.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BASIC_SERIALIZER_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/detail/basic_serializer_map.hpp
==============================================================================
--- branches/release/boost/archive/detail/basic_serializer_map.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/basic_serializer_map.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_SERIALIZER_MAP_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/detail/check.hpp
==============================================================================
--- branches/release/boost/archive/detail/check.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/check.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_DETAIL_CHECK_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #pragma inline_depth(511)
 #pragma inline_recursion(on)
Modified: branches/release/boost/archive/detail/common_iarchive.hpp
==============================================================================
--- branches/release/boost/archive/detail/common_iarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/common_iarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_DETAIL_COMMON_IARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/detail/common_oarchive.hpp
==============================================================================
--- branches/release/boost/archive/detail/common_oarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/common_oarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_DETAIL_COMMON_OARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/detail/decl.hpp
==============================================================================
--- branches/release/boost/archive/detail/decl.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/decl.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_DETAIL_DECL_HPP 
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif 
 
Modified: branches/release/boost/archive/detail/interface_iarchive.hpp
==============================================================================
--- branches/release/boost/archive/detail/interface_iarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/interface_iarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_DETAIL_INTERFACE_IARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/detail/interface_oarchive.hpp
==============================================================================
--- branches/release/boost/archive/detail/interface_oarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/interface_oarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_DETAIL_INTERFACE_OARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/detail/iserializer.hpp
==============================================================================
--- branches/release/boost/archive/detail/iserializer.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/iserializer.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_DETAIL_ISERIALIZER_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #pragma inline_depth(511)
 #pragma inline_recursion(on)
@@ -62,7 +62,6 @@
 #define DONT_USE_HAS_NEW_OPERATOR (                    \
     defined(__BORLANDC__)                              \
     || BOOST_WORKAROUND(__IBMCPP__, < 1210)            \
-    || defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)     \
     || defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x590)   \
 )
 
@@ -233,27 +232,28 @@
 //    }
 //}
 
+#if 0
 template<class T>
 struct heap_allocator
 {
     // boost::has_new_operator< T > doesn't work on these compilers
     #if DONT_USE_HAS_NEW_OPERATOR
         // This doesn't handle operator new overload for class T
-        static T * invoke(){
+        static void * invoke(){
             return static_cast<T *>(operator new(sizeof(T)));
         }
     #else
         struct has_new_operator {
-            static T* invoke() {
+            static void * invoke() {
                 return static_cast<T *>((T::operator new)(sizeof(T)));
             }
         };
         struct doesnt_have_new_operator {
-            static T* invoke() {
+            static void * invoke() {
                 return static_cast<T *>(operator new(sizeof(T)));
             }
         };
-        static T * invoke() {
+        static void * invoke() {
             typedef BOOST_DEDUCED_TYPENAME
                 mpl::eval_if<
                     boost::has_new_operator< T >,
@@ -289,47 +289,143 @@
 private:
     T* m_p;
 };
+#endif
+
+// the purpose of this code is to allocate memory for an object
+// without requiring the constructor to be called.  Presumably
+// the allocated object will be subsequently initialized with
+// "placement new". 
+// note: we have the boost type trait has_new_operator but we
+// have no corresponding has_delete_operator.  So we presume
+// that the former being true would imply that the a delete
+// operator is also defined for the class T.
+
+template<class T>
+struct heap_allocation {
+    // boost::has_new_operator< T > doesn't work on these compilers
+    #if DONT_USE_HAS_NEW_OPERATOR
+        // This doesn't handle operator new overload for class T
+        static T * invoke_new(){
+            return static_cast<T *>(operator new(sizeof(T)));
+        }
+        static viod invoke_delete(){
+            (operator delete(sizeof(T)));
+        }
+    #else
+        // note: we presume that a true value for has_new_operator
+        // implies the existence of a class specific delete operator as well
+        // as a class specific new operator.
+        struct has_new_operator {
+            static T * invoke_new() {
+                return static_cast<T *>((T::operator new)(sizeof(T)));
+            }
+            static void invoke_delete(T * t) {
+                // if compilation fails here, the likely cause that the class
+                // T has a class specific new operator but no class specific
+                // delete operator which matches the following signature.  Fix
+                // your program to have this.  Note that adding operator delete
+                // with only one parameter doesn't seem correct to me since 
+                // the standard(3.7.4.2) says "
+                // "If a class T has a member deallocation function named
+                // 'operator delete' with exactly one parameter, then that function 
+                // is a usual (non-placement) deallocation function" which I take
+                // to mean that it will call the destructor of type T which we don't
+                // want to do here.
+                // Note: reliance upon automatic conversion from T * to void * here
+                (T::operator delete)(t, sizeof(T));
+            }
+        };
+        struct doesnt_have_new_operator {
+            static T* invoke_new() {
+                return static_cast<T *>(operator new(sizeof(T)));
+            }
+            static void invoke_delete(T * t) {
+                // Note: I'm reliance upon automatic conversion from T * to void * here
+                (operator delete)(t);
+            }
+        };
+        static T * invoke_new() {
+            typedef BOOST_DEDUCED_TYPENAME
+                mpl::eval_if<
+                    boost::has_new_operator< T >,
+                    mpl::identity<has_new_operator >,
+                    mpl::identity<doesnt_have_new_operator >    
+                >::type typex;
+            return typex::invoke_new();
+        }
+        static void invoke_delete(T *t) {
+            typedef BOOST_DEDUCED_TYPENAME
+                mpl::eval_if<
+                    boost::has_new_operator< T >,
+                    mpl::identity<has_new_operator >,
+                    mpl::identity<doesnt_have_new_operator >    
+                >::type typex;
+            typex::invoke_delete(t);
+        }
+    #endif
+    explicit heap_allocation(){
+        m_p = invoke_new();
+    }
+    ~heap_allocation(){
+        if (0 != m_p)
+            invoke_delete(m_p);
+    }
+    T* get() const {
+        return m_p;
+    }
+
+    T* release() {
+        T* p = m_p;
+        m_p = 0;
+        return p;
+    }
+private:
+    T* m_p;
+};
 
 // note: BOOST_DLLEXPORT is so that code for polymorphic class
 // serialized only through base class won't get optimized out
 template<class Archive, class T>
 BOOST_DLLEXPORT void pointer_iserializer<Archive, T>::load_object_ptr(
     basic_iarchive & ar, 
-    void * & x,
+    void * & t,
     const unsigned int file_version
 ) const
 {
     Archive & ar_impl = 
         boost::serialization::smart_cast_reference<Archive &>(ar);
 
-    auto_ptr_with_deleter< T > ap(heap_allocator< T >::invoke());
-    if(NULL == ap.get())
-        boost::serialization::throw_exception(std::bad_alloc()) ;
-
-    T * t = ap.get();
-    x = t;
+    heap_allocation<T> h;
+    t = NULL;
+    // note that the above will throw std::bad_alloc if the allocation
+    // fails so we don't have to address this contingency here.
 
     // catch exception during load_construct_data so that we don't
     // automatically delete the t which is most likely not fully
     // constructed
     BOOST_TRY {
-        // this addresses an obscure situtation that occurs when 
+        // this addresses an obscure situation that occurs when 
         // load_constructor de-serializes something through a pointer.
-        ar.next_object_pointer(t);
+        ar.next_object_pointer(h.get());
         boost::serialization::load_construct_data_adl<Archive, T>(
             ar_impl,
-            t, 
+            h.get(), 
             file_version
         );
     }
     BOOST_CATCH(...){
-        ap.release();
+        // if we get here the load_construct failed.  The heap_allocation
+        // will be automatically deleted so we don't have to do anything
+        // special here.
         BOOST_RETHROW;
     }
     BOOST_CATCH_END
 
-    ar_impl >> boost::serialization::make_nvp(NULL, * t);
-    ap.release();
+    ar_impl >> boost::serialization::make_nvp(NULL, *h.get());
+    // success !!! - release the heap allocation so it
+    // doesn't delete the object we just loaded.
+    t = h.get();
+    h.release();
 }
 
 template<class Archive, class T>
Modified: branches/release/boost/archive/detail/oserializer.hpp
==============================================================================
--- branches/release/boost/archive/detail/oserializer.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/oserializer.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_OSERIALIZER_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #pragma inline_depth(511)
 #pragma inline_recursion(on)
Modified: branches/release/boost/archive/detail/polymorphic_iarchive_route.hpp
==============================================================================
--- branches/release/boost/archive/detail/polymorphic_iarchive_route.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/polymorphic_iarchive_route.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_DETAIL_POLYMORPHIC_IARCHIVE_ROUTE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/detail/polymorphic_oarchive_route.hpp
==============================================================================
--- branches/release/boost/archive/detail/polymorphic_oarchive_route.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/polymorphic_oarchive_route.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_DETAIL_POLYMORPHIC_OARCHIVE_ROUTE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/detail/utf8_codecvt_facet.hpp
==============================================================================
--- branches/release/boost/archive/detail/utf8_codecvt_facet.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/detail/utf8_codecvt_facet.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -7,15 +7,17 @@
 #ifndef BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP
 #define BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP
 
-#define BOOST_UTF8_BEGIN_NAMESPACE \
-     namespace boost { namespace archive { namespace detail {
-#define BOOST_UTF8_DECL
-#define BOOST_UTF8_END_NAMESPACE }}}
+#ifdef BOOST_NO_CXX11_HDR_CODECVT
+    #define BOOST_UTF8_BEGIN_NAMESPACE \
+         namespace boost { namespace archive { namespace detail {
+    #define BOOST_UTF8_DECL
+    #define BOOST_UTF8_END_NAMESPACE }}}
 
-#include <boost/detail/utf8_codecvt_facet.hpp>
-
-#undef BOOST_UTF8_END_NAMESPACE
-#undef BOOST_UTF8_DECL
-#undef BOOST_UTF8_BEGIN_NAMESPACE
+    #include <boost/detail/utf8_codecvt_facet.hpp>
 
+    #undef BOOST_UTF8_END_NAMESPACE
+    #undef BOOST_UTF8_DECL
+    #undef BOOST_UTF8_BEGIN_NAMESPACE
+#endif // BOOST_NO_CXX11_HDR_CODECVT
 #endif // BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP
+
Modified: branches/release/boost/archive/dinkumware.hpp
==============================================================================
--- branches/release/boost/archive/dinkumware.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/dinkumware.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_DINKUMWARE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/impl/basic_binary_iarchive.ipp
==============================================================================
--- branches/release/boost/archive/impl/basic_binary_iarchive.ipp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/impl/basic_binary_iarchive.ipp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -113,10 +113,7 @@
     #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205))
     this->set_library_version(input_library_version);
     #else
-    #if ! BOOST_WORKAROUND(BOOST_MSVC, <= 1200)
-    detail::
-    #endif
-    basic_iarchive::set_library_version(input_library_version);
+    detail::basic_iarchive::set_library_version(input_library_version);
     #endif
     
     if(BOOST_ARCHIVE_VERSION() < input_library_version)
Modified: branches/release/boost/archive/impl/basic_binary_iprimitive.ipp
==============================================================================
--- branches/release/boost/archive/impl/basic_binary_iprimitive.ipp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/impl/basic_binary_iprimitive.ipp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -28,6 +28,7 @@
 #include <boost/archive/archive_exception.hpp>
 #include <boost/archive/codecvt_null.hpp>
 #include <boost/archive/add_facet.hpp>
+#include <boost/archive/basic_binary_iprimitive.hpp> 
 
 namespace boost {
 namespace archive {
Modified: branches/release/boost/archive/impl/basic_binary_oprimitive.ipp
==============================================================================
--- branches/release/boost/archive/impl/basic_binary_oprimitive.ipp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/impl/basic_binary_oprimitive.ipp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -31,6 +31,7 @@
 
 #include <boost/archive/add_facet.hpp>
 #include <boost/archive/codecvt_null.hpp>
+#include <boost/archive/basic_binary_oprimitive.hpp>
 
 namespace boost {
 namespace archive {
Modified: branches/release/boost/archive/impl/basic_text_iarchive.ipp
==============================================================================
--- branches/release/boost/archive/impl/basic_text_iarchive.ipp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/impl/basic_text_iarchive.ipp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -62,10 +62,7 @@
     #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205))
     this->set_library_version(input_library_version);
     #else
-    #if ! BOOST_WORKAROUND(BOOST_MSVC, <= 1200)
-    detail::
-    #endif
-    basic_iarchive::set_library_version(input_library_version);
+    detail::basic_iarchive::set_library_version(input_library_version);
     #endif
 
     // extra little .t is to get around borland quirk
Modified: branches/release/boost/archive/impl/basic_text_oprimitive.ipp
==============================================================================
--- branches/release/boost/archive/impl/basic_text_oprimitive.ipp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/impl/basic_text_oprimitive.ipp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -9,6 +9,7 @@
 //  See http://www.boost.org for updates, documentation, and revision history.
 
 #include <cstddef> // NULL
+#include <algorithm> // std::copy
 #include <boost/serialization/pfto.hpp>
 
 #include <boost/archive/basic_text_oprimitive.hpp>
Modified: branches/release/boost/archive/impl/basic_xml_grammar.hpp
==============================================================================
--- branches/release/boost/archive/impl/basic_xml_grammar.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/impl/basic_xml_grammar.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_BASIC_XML_GRAMMAR_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -50,11 +50,6 @@
 #include <boost/config.hpp>
 #include <boost/detail/workaround.hpp>
 
-// supress noise
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1200)
-#  pragma warning (disable : 4786) // too long name, harmless warning
-#endif
-
 #include <boost/spirit/include/classic_rule.hpp>
 #include <boost/spirit/include/classic_chset.hpp>
 
Modified: branches/release/boost/archive/impl/xml_oarchive_impl.ipp
==============================================================================
--- branches/release/boost/archive/impl/xml_oarchive_impl.ipp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/impl/xml_oarchive_impl.ipp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -8,7 +8,7 @@
 
 #include <ostream>
 #include <iomanip>
-#include <algorithm>
+#include <algorithm> // std::copy
 #include <string>
 
 #include <cstring> // strlen
Modified: branches/release/boost/archive/impl/xml_wiarchive_impl.ipp
==============================================================================
--- branches/release/boost/archive/impl/xml_wiarchive_impl.ipp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/impl/xml_wiarchive_impl.ipp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -21,7 +21,7 @@
 #ifndef BOOST_NO_STD_WSTREAMBUF
 
 #include <boost/assert.hpp>
-#include <algorithm>
+#include <algorithm> // std::copy
 
 #include <boost/detail/workaround.hpp> // Dinkumware and RogueWave
 #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
@@ -34,9 +34,16 @@
 
 #include <boost/serialization/string.hpp>
 #include <boost/archive/add_facet.hpp>
-#include <boost/archive/xml_archive_exception.hpp>
-#include <boost/archive/detail/utf8_codecvt_facet.hpp>
+#ifndef BOOST_NO_CXX11_HDR_CODECVT
+    #include <codecvt>
+    namespace boost { namespace archive { namespace detail {
+        typedef std::codecvt_utf8<wchar_t> utf8_codecvt_facet;
+    } } }
+#else
+    #include <boost/archive/detail/utf8_codecvt_facet.hpp>
+#endif
 
+#include <boost/archive/xml_archive_exception.hpp>
 #include <boost/archive/iterators/mb_from_wchar.hpp>
 
 #include <boost/archive/basic_xml_archive.hpp>
Modified: branches/release/boost/archive/impl/xml_woarchive_impl.ipp
==============================================================================
--- branches/release/boost/archive/impl/xml_woarchive_impl.ipp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/impl/xml_woarchive_impl.ipp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -11,7 +11,7 @@
 
 #include <ostream>
 #include <string>
-#include <algorithm>
+#include <algorithm> // std::copy
 #include <locale>
 
 #include <boost/config.hpp> // msvc 6.0 needs this to suppress warnings 
@@ -39,7 +39,14 @@
 #include <boost/archive/iterators/dataflow_exception.hpp>
 
 #include <boost/archive/add_facet.hpp>
-#include <boost/archive/detail/utf8_codecvt_facet.hpp>
+#ifndef BOOST_NO_CXX11_HDR_CODECVT
+    #include <codecvt>
+    namespace boost { namespace archive { namespace detail {
+        typedef std::codecvt_utf8<wchar_t> utf8_codecvt_facet;
+    } } }
+#else
+    #include <boost/archive/detail/utf8_codecvt_facet.hpp>
+#endif
 
 namespace boost {
 namespace archive {
Modified: branches/release/boost/archive/iterators/base64_exception.hpp
==============================================================================
--- branches/release/boost/archive/iterators/base64_exception.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/iterators/base64_exception.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_ITERATORS_BASE64_EXCEPTION_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/iterators/base64_from_binary.hpp
==============================================================================
--- branches/release/boost/archive/iterators/base64_from_binary.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/iterators/base64_from_binary.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_ITERATORS_BASE64_FROM_BINARY_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/iterators/binary_from_base64.hpp
==============================================================================
--- branches/release/boost/archive/iterators/binary_from_base64.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/iterators/binary_from_base64.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_ITERATORS_BINARY_FROM_BASE64_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/iterators/dataflow.hpp
==============================================================================
--- branches/release/boost/archive/iterators/dataflow.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/iterators/dataflow.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_ITERATORS_DATAFLOW_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/iterators/dataflow_exception.hpp
==============================================================================
--- branches/release/boost/archive/iterators/dataflow_exception.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/iterators/dataflow_exception.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_ITERATORS_DATAFLOW_EXCEPTION_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/iterators/escape.hpp
==============================================================================
--- branches/release/boost/archive/iterators/escape.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/iterators/escape.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_ITERATORS_ESCAPE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/iterators/head_iterator.hpp
==============================================================================
--- branches/release/boost/archive/iterators/head_iterator.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/iterators/head_iterator.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_ITERATORS_HEAD_ITERATOR_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/iterators/insert_linebreaks.hpp
==============================================================================
--- branches/release/boost/archive/iterators/insert_linebreaks.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/iterators/insert_linebreaks.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_ITERATORS_INSERT_LINEBREAKS_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/iterators/istream_iterator.hpp
==============================================================================
--- branches/release/boost/archive/iterators/istream_iterator.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/iterators/istream_iterator.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_ITERATORS_ISTREAM_ITERATOR_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/iterators/mb_from_wchar.hpp
==============================================================================
--- branches/release/boost/archive/iterators/mb_from_wchar.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/iterators/mb_from_wchar.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_ITERATORS_MB_FROM_WCHAR_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/iterators/ostream_iterator.hpp
==============================================================================
--- branches/release/boost/archive/iterators/ostream_iterator.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/iterators/ostream_iterator.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_ITERATORS_OSTREAM_ITERATOR_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/iterators/remove_whitespace.hpp
==============================================================================
--- branches/release/boost/archive/iterators/remove_whitespace.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/iterators/remove_whitespace.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_ITERATORS_REMOVE_WHITESPACE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -26,9 +26,6 @@
 #include <boost/iterator/filter_iterator.hpp>
 #include <boost/iterator/iterator_traits.hpp>
 
-//#include <boost/detail/workaround.hpp>
-//#if ! BOOST_WORKAROUND(BOOST_MSVC, <=1300)
-
 // here is the default standard implementation of the functor used
 // by the filter iterator to remove spaces.  Unfortunately usage
 // of this implementation in combination with spirit trips a bug
@@ -53,8 +50,6 @@
 #undef iswspace
 #endif
 
-//#endif // BOOST_WORKAROUND
-
 namespace { // anonymous
 
 template<class CharType>
Modified: branches/release/boost/archive/iterators/transform_width.hpp
==============================================================================
--- branches/release/boost/archive/iterators/transform_width.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/iterators/transform_width.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_ITERATORS_TRANSFORM_WIDTH_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -24,12 +24,15 @@
 // character and 8 bit bytes. Lowest common multiple is 24 => 4 6 bit characters
 // or 3 8 bit characters
 
+
 #include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME & PTFO
 #include <boost/serialization/pfto.hpp>
 
 #include <boost/iterator/iterator_adaptor.hpp>
 #include <boost/iterator/iterator_traits.hpp>
 
+#include <algorithm> // std::min
+
 namespace boost { 
 namespace archive {
 namespace iterators {
@@ -112,6 +115,10 @@
     transform_width(BOOST_PFTO_WRAPPER(T) start) : 
         super_t(Base(BOOST_MAKE_PFTO_WRAPPER(static_cast< T >(start)))),
         m_buffer_out_full(false),
+        // To disable GCC warning, but not truly necessary 
+	    //(m_buffer_in will be initialized later before being 
+	    //used because m_remaining_bits == 0)
+        m_buffer_in(0), 
         m_remaining_bits(0),
         m_end_of_sequence(false)
     {}
@@ -119,8 +126,8 @@
     transform_width(const transform_width & rhs) : 
         super_t(rhs.base_reference()),
         m_buffer_out_full(rhs.m_buffer_out_full),
-        m_remaining_bits(rhs.m_remaining_bits),
         m_buffer_in(rhs.m_buffer_in),
+        m_remaining_bits(rhs.m_remaining_bits),
         m_end_of_sequence(false)
     {}
 };
Modified: branches/release/boost/archive/iterators/unescape.hpp
==============================================================================
--- branches/release/boost/archive/iterators/unescape.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/iterators/unescape.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_ITERATORS_UNESCAPE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/iterators/wchar_from_mb.hpp
==============================================================================
--- branches/release/boost/archive/iterators/wchar_from_mb.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/iterators/wchar_from_mb.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_ITERATORS_WCHAR_FROM_MB_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/iterators/xml_escape.hpp
==============================================================================
--- branches/release/boost/archive/iterators/xml_escape.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/iterators/xml_escape.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_ITERATORS_XML_ESCAPE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/iterators/xml_unescape.hpp
==============================================================================
--- branches/release/boost/archive/iterators/xml_unescape.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/iterators/xml_unescape.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_ITERATORS_XML_UNESCAPE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/iterators/xml_unescape_exception.hpp
==============================================================================
--- branches/release/boost/archive/iterators/xml_unescape_exception.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/iterators/xml_unescape_exception.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_ITERATORS_XML_UNESCAPE_EXCEPTION_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/polymorphic_binary_iarchive.hpp
==============================================================================
--- branches/release/boost/archive/polymorphic_binary_iarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/polymorphic_binary_iarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_POLYMORPHIC_BINARY_IARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/polymorphic_binary_oarchive.hpp
==============================================================================
--- branches/release/boost/archive/polymorphic_binary_oarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/polymorphic_binary_oarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_POLYMORPHIC_BINARY_OARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/polymorphic_iarchive.hpp
==============================================================================
--- branches/release/boost/archive/polymorphic_iarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/polymorphic_iarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_POLYMORPHIC_IARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/polymorphic_oarchive.hpp
==============================================================================
--- branches/release/boost/archive/polymorphic_oarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/polymorphic_oarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_POLYMORPHIC_OARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/polymorphic_text_iarchive.hpp
==============================================================================
--- branches/release/boost/archive/polymorphic_text_iarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/polymorphic_text_iarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_POLYMORPHIC_TEXT_IARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/polymorphic_text_oarchive.hpp
==============================================================================
--- branches/release/boost/archive/polymorphic_text_oarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/polymorphic_text_oarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_POLYMORPHIC_TEXT_OARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/polymorphic_text_wiarchive.hpp
==============================================================================
--- branches/release/boost/archive/polymorphic_text_wiarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/polymorphic_text_wiarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_POLYMORPHIC_TEXT_WIARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/polymorphic_text_woarchive.hpp
==============================================================================
--- branches/release/boost/archive/polymorphic_text_woarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/polymorphic_text_woarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_POLYMORPHIC_TEXT_WOARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/polymorphic_xml_iarchive.hpp
==============================================================================
--- branches/release/boost/archive/polymorphic_xml_iarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/polymorphic_xml_iarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_POLYMORPHIC_XML_IARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/polymorphic_xml_oarchive.hpp
==============================================================================
--- branches/release/boost/archive/polymorphic_xml_oarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/polymorphic_xml_oarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_POLYMORPHIC_XML_OARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/polymorphic_xml_wiarchive.hpp
==============================================================================
--- branches/release/boost/archive/polymorphic_xml_wiarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/polymorphic_xml_wiarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_POLYMORPHIC_XML_WIARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/polymorphic_xml_woarchive.hpp
==============================================================================
--- branches/release/boost/archive/polymorphic_xml_woarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/polymorphic_xml_woarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_POLYMORPHIC_XML_WOARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/shared_ptr_helper.hpp
==============================================================================
--- branches/release/boost/archive/shared_ptr_helper.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/shared_ptr_helper.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_SHARED_PTR_HELPER_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/text_iarchive.hpp
==============================================================================
--- branches/release/boost/archive/text_iarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/text_iarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_TEXT_IARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -35,6 +35,10 @@
 namespace boost { 
 namespace archive {
 
+namespace detail {
+    template<class Archive> class interface_iarchive;
+} // namespace detail
+
 template<class Archive>
 class text_iarchive_impl : 
     public basic_text_iprimitive<std::istream>,
Modified: branches/release/boost/archive/text_oarchive.hpp
==============================================================================
--- branches/release/boost/archive/text_oarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/text_oarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_TEXT_OARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -42,6 +42,10 @@
 namespace boost { 
 namespace archive {
 
+namespace detail {
+    template<class Archive> class interface_oarchive;
+} // namespace detail
+
 template<class Archive>
 class text_oarchive_impl : 
      /* protected ? */ public basic_text_oprimitive<std::ostream>,
Modified: branches/release/boost/archive/text_wiarchive.hpp
==============================================================================
--- branches/release/boost/archive/text_wiarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/text_wiarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_TEXT_WIARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -39,6 +39,10 @@
 namespace boost { 
 namespace archive {
 
+namespace detail {
+    template<class Archive> class interface_iarchive;
+} // namespace detail
+
 template<class Archive>
 class text_wiarchive_impl : 
     public basic_text_iprimitive<std::wistream>,
Modified: branches/release/boost/archive/text_woarchive.hpp
==============================================================================
--- branches/release/boost/archive/text_woarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/text_woarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_TEXT_WOARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -47,6 +47,10 @@
 namespace boost { 
 namespace archive {
 
+namespace detail {
+    template<class Archive> class interface_oarchive;
+} // namespace detail
+
 template<class Archive>
 class text_woarchive_impl : 
     public basic_text_oprimitive<std::wostream>,
Modified: branches/release/boost/archive/tmpdir.hpp
==============================================================================
--- branches/release/boost/archive/tmpdir.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/tmpdir.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_TMPDIR_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/wcslen.hpp
==============================================================================
--- branches/release/boost/archive/wcslen.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/wcslen.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_WCSLEN_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/xml_archive_exception.hpp
==============================================================================
--- branches/release/boost/archive/xml_archive_exception.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/xml_archive_exception.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_XML_ARCHIVE_EXCEPTION_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
Modified: branches/release/boost/archive/xml_iarchive.hpp
==============================================================================
--- branches/release/boost/archive/xml_iarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/xml_iarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_XML_IARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -35,6 +35,10 @@
 namespace boost { 
 namespace archive {
 
+namespace detail {
+    template<class Archive> class interface_iarchive;
+} // namespace detail
+
 template<class CharType>
 class basic_xml_grammar;
 typedef basic_xml_grammar<char> xml_grammar;
Modified: branches/release/boost/archive/xml_oarchive.hpp
==============================================================================
--- branches/release/boost/archive/xml_oarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/xml_oarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_XML_OARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -42,6 +42,10 @@
 namespace boost {
 namespace archive {
 
+namespace detail {
+    template<class Archive> class interface_oarchive;
+} // namespace detail
+
 template<class Archive>
 class xml_oarchive_impl : 
     public basic_text_oprimitive<std::ostream>,
Modified: branches/release/boost/archive/xml_wiarchive.hpp
==============================================================================
--- branches/release/boost/archive/xml_wiarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/xml_wiarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_XML_WIARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
@@ -40,6 +40,10 @@
 namespace boost { 
 namespace archive {
 
+namespace detail {
+    template<class Archive> class interface_iarchive;
+} // namespace detail
+
 template<class CharType>
 class basic_xml_grammar;
 typedef basic_xml_grammar<wchar_t> xml_wgrammar;
Modified: branches/release/boost/archive/xml_woarchive.hpp
==============================================================================
--- branches/release/boost/archive/xml_woarchive.hpp	Sat Nov 16 13:49:28 2013	(r86722)
+++ branches/release/boost/archive/xml_woarchive.hpp	2013-11-16 14:31:12 EST (Sat, 16 Nov 2013)	(r86723)
@@ -2,7 +2,7 @@
 #define BOOST_ARCHIVE_XML_WOARCHIVE_HPP
 
 // MS compatible compilers support #pragma once
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif