$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r52241 - trunk/boost/mpl
From: eric_at_[hidden]
Date: 2009-04-07 15:53:53
Author: eric_niebler
Date: 2009-04-07 15:53:53 EDT (Tue, 07 Apr 2009)
New Revision: 52241
URL: http://svn.boost.org/trac/boost/changeset/52241
Log:
msvc-7.1 portability fix, signed/unsigned warning fix
Text files modified: 
   trunk/boost/mpl/string.hpp |    37 ++++++++++++++++++++++++++++++-------   
   1 files changed, 30 insertions(+), 7 deletions(-)
Modified: trunk/boost/mpl/string.hpp
==============================================================================
--- trunk/boost/mpl/string.hpp	(original)
+++ trunk/boost/mpl/string.hpp	2009-04-07 15:53:53 EDT (Tue, 07 Apr 2009)
@@ -14,6 +14,8 @@
 // $Date: 2009-04-01 02:10:26 -0700 (Wed, 1 Apr 2009) $
 // $Revision: 49239 $
 
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
 #include <boost/mpl/char.hpp>
 #include <boost/mpl/long.hpp>
 #include <boost/mpl/back.hpp>
@@ -52,7 +54,7 @@
     template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_MPL_STRING_MAX_PARAMS, unsigned int C, 0)>
     struct string;
 
-    template<typename Sequence, long N>
+    template<typename Sequence, unsigned long N>
     struct string_iterator;
 
     template<typename Sequence>
@@ -299,18 +301,18 @@
         template<typename First, typename Last>
         struct apply
         {
-            typedef mpl::long_<Last::index - First::index> type;
+            typedef mpl::long_<(long)Last::index - (long)First::index> type;
         };
     };
 
-    template<typename Sequence, long N>
+    template<typename Sequence, unsigned long N>
     struct string_iterator
       : Sequence::template at<N>
     {
         typedef string_iterator_tag tag;
         typedef std::random_access_iterator_tag category;
         typedef Sequence string_type;
-        static long const index = N;
+        static unsigned long const index = N;
         typedef string_iterator<Sequence, N+1> next;
         typedef string_iterator<Sequence, N-1> prior;
     };
@@ -331,15 +333,36 @@
 
         static std::size_t const size = BOOST_MPL_MULTICHAR_LENGTH(C0) + rest_::size;
 
-        template<long Pos, bool B = (Pos < BOOST_MPL_MULTICHAR_LENGTH(C0))>
+    #if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+    private:
+        /// INTERNAL ONLY
+        template<unsigned long Pos, bool B>
+        struct at_impl
+          : boost::mpl::char_<BOOST_MPL_MULTICHAR_AT(C0,Pos)>
+        {};
+
+        /// INTERNAL ONLY
+        template<unsigned long Pos>
+        struct at_impl<Pos, false>
+          : rest_::template at<Pos-BOOST_MPL_MULTICHAR_LENGTH(C0)>
+        {};
+
+    public:
+        template<unsigned long Pos>
+        struct at
+          : at_impl<Pos, (Pos < BOOST_MPL_MULTICHAR_LENGTH(C0))>
+        {};
+    #else
+        template<unsigned long Pos, bool B = (Pos < BOOST_MPL_MULTICHAR_LENGTH(C0))>
         struct at
           : boost::mpl::char_<BOOST_MPL_MULTICHAR_AT(C0,Pos)>
         {};
 
-        template<long Pos>
+        template<unsigned long Pos>
         struct at<Pos, false>
           : rest_::template at<Pos-BOOST_MPL_MULTICHAR_LENGTH(C0)>
         {};
+    #endif
 
         static char const c_str[];
     };
@@ -378,7 +401,7 @@
 
         static std::size_t const size = 0;
 
-        template<unsigned int>
+        template<unsigned long>
         struct at
           : boost::mpl::char_<'\0'>
         {};