$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r55125 - branches/release/libs/detail
From: bdawes_at_[hidden]
Date: 2009-07-23 11:20:54
Author: bemandawes
Date: 2009-07-23 11:20:53 EDT (Thu, 23 Jul 2009)
New Revision: 55125
URL: http://svn.boost.org/trac/boost/changeset/55125
Log:
Merge from trunk
Text files modified: 
   branches/release/libs/detail/utf8_codecvt_facet.cpp |    26 +++++++++++++++++++++-----              
   1 files changed, 21 insertions(+), 5 deletions(-)
Modified: branches/release/libs/detail/utf8_codecvt_facet.cpp
==============================================================================
--- branches/release/libs/detail/utf8_codecvt_facet.cpp	(original)
+++ branches/release/libs/detail/utf8_codecvt_facet.cpp	2009-07-23 11:20:53 EDT (Thu, 23 Jul 2009)
@@ -159,7 +159,7 @@
             to_next = to - (i+1);
             return std::codecvt_base::partial;
         }
-        *from++;
+        ++from;
     }
     from_next = from;
     to_next = to;
@@ -231,9 +231,6 @@
     return 2;
 }
 
-// note the following code will generate on some platforms where
-// wchar_t is defined as UCS2.  The warnings are superfluous as
-// the specialization is never instantitiated with such compilers.
 template<>
 int get_cont_octet_out_count_impl<4>(wchar_t word){
     if (word < 0x80) {
@@ -242,7 +239,22 @@
     if (word < 0x800) {
         return 1;
     }
-    if (word < 0x10000) {
+
+    // Note that the following code will generate warnings on some platforms
+    // where wchar_t is defined as UCS2.  The warnings are superfluous as the
+    // specialization is never instantitiated with such compilers, but this
+    // can cause problems if warnings are being treated as errors, so we guard
+    // against that.  Including <boost/detail/utf8_codecvt_facet.hpp> as we do
+    // should be enough to get WCHAR_MAX defined.
+#if !defined(WCHAR_MAX)
+#   error WCHAR_MAX not defined!
+#endif
+    // cope with VC++ 7.1 or earlier having invalid WCHAR_MAX
+#if defined(_MSC_VER) && _MSC_VER <= 1310 // 7.1 or earlier
+    return 2;
+#elif WCHAR_MAX > 0x10000
+    
+   if (word < 0x10000) {
         return 2;
     }
     if (word < 0x200000) {
@@ -252,6 +264,10 @@
         return 4;
     }
     return 5;
+    
+#else
+    return 2;
+#endif
 }
 
 } // namespace anonymous