Merge from trunk

[SVN r55125]
This commit is contained in:
Beman Dawes
2009-07-23 15:20:53 +00:00
parent 4a28e5d5a1
commit debb7ae2de

View File

@@ -159,7 +159,7 @@ std::codecvt_base::result utf8_codecvt_facet::do_out(
to_next = to - (i+1); to_next = to - (i+1);
return std::codecvt_base::partial; return std::codecvt_base::partial;
} }
*from++; ++from;
} }
from_next = from; from_next = from;
to_next = to; to_next = to;
@@ -231,9 +231,6 @@ int get_cont_octet_out_count_impl(wchar_t word){
return 2; 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<> template<>
int get_cont_octet_out_count_impl<4>(wchar_t word){ int get_cont_octet_out_count_impl<4>(wchar_t word){
if (word < 0x80) { if (word < 0x80) {
@@ -242,6 +239,21 @@ int get_cont_octet_out_count_impl<4>(wchar_t word){
if (word < 0x800) { if (word < 0x800) {
return 1; return 1;
} }
// 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) { if (word < 0x10000) {
return 2; return 2;
} }
@@ -252,6 +264,10 @@ int get_cont_octet_out_count_impl<4>(wchar_t word){
return 4; return 4;
} }
return 5; return 5;
#else
return 2;
#endif
} }
} // namespace anonymous } // namespace anonymous