|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r71006 - trunk/boost
From: marshall_at_[hidden]
Date: 2011-04-05 13:33:51
Author: marshall
Date: 2011-04-05 13:33:50 EDT (Tue, 05 Apr 2011)
New Revision: 71006
URL: http://svn.boost.org/trac/boost/changeset/71006
Log:
Applied patch; Refs #4649
Text files modified:
trunk/boost/token_functions.hpp | 40 ++++++++++++++++++++++++++++++++--------
1 files changed, 32 insertions(+), 8 deletions(-)
Modified: trunk/boost/token_functions.hpp
==============================================================================
--- trunk/boost/token_functions.hpp (original)
+++ trunk/boost/token_functions.hpp 2011-04-05 13:33:50 EDT (Tue, 05 Apr 2011)
@@ -209,6 +209,36 @@
// Assuming that the conditional will always get optimized out in the function
// implementations, argument types are not a problem since both forms of character classifiers
// expect an int.
+
+#if !defined(BOOST_NO_CWCTYPE)
+ template<typename traits, int N>
+ struct traits_extension_details : public traits {
+ typedef typename traits::char_type char_type;
+ static bool isspace(char_type c)
+ {
+ return std::iswspace(c) != 0;
+ }
+ static bool ispunct(char_type c)
+ {
+ return std::iswpunct(c) != 0;
+ }
+ };
+
+ template<typename traits>
+ struct traits_extension_details<traits, 1> : public traits {
+ typedef typename traits::char_type char_type;
+ static bool isspace(char_type c)
+ {
+ return std::isspace(c) != 0;
+ }
+ static bool ispunct(char_type c)
+ {
+ return std::ispunct(c) != 0;
+ }
+ };
+#endif
+
+
// In case there is no cwctype header, we implement the checks manually.
// We make use of the fact that the tested categories should fit in ASCII.
template<typename traits>
@@ -217,10 +247,7 @@
static bool isspace(char_type c)
{
#if !defined(BOOST_NO_CWCTYPE)
- if (sizeof(char_type) == 1)
- return std::isspace(static_cast<int>(c)) != 0;
- else
- return std::iswspace(static_cast<std::wint_t>(c)) != 0;
+ return traits_extension_details<traits, sizeof(char_type)>::isspace(c);
#else
return static_cast< unsigned >(c) <= 255 && std::isspace(c) != 0;
#endif
@@ -229,10 +256,7 @@
static bool ispunct(char_type c)
{
#if !defined(BOOST_NO_CWCTYPE)
- if (sizeof(char_type) == 1)
- return std::ispunct(static_cast<int>(c)) != 0;
- else
- return std::iswpunct(static_cast<std::wint_t>(c)) != 0;
+ return traits_extension_details<traits, sizeof(char_type)>::ispunct(c);
#else
return static_cast< unsigned >(c) <= 255 && std::ispunct(c) != 0;
#endif
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk