diff --git a/include/boost/re_detail/regex_config.hpp b/include/boost/re_detail/regex_config.hpp index 93267a70..a74a267e 100644 --- a/include/boost/re_detail/regex_config.hpp +++ b/include/boost/re_detail/regex_config.hpp @@ -504,9 +504,20 @@ typedef unsigned long jm_uintfast32_t; //#define BOOST_RE_NO_NOT_EQUAL #endif - #elif defined(__STD_ITERATOR__) + #elif defined(_RWSTD_VER) /* Rogue Wave STL */ + // Sometimes we have a four figure version number, sometimes a + // six figure one (RW seems to omit trailing zeros from version number) + #ifndef _RWSTD_VER + #define BOOST_RWSTD_VER 0 + #else + #if _RWSTD_VER < 0x10000 + #define BOOST_RWSTD_VER (_RWSTD_VER << 8) + #else + #define BOOST_RWSTD_VER _RWSTD_VER + #endif + #endif #if defined(RWSTD_NO_MEMBER_TEMPLATES) || defined(RWSTD_NO_MEM_CLASS_TEMPLATES) #define BOOST_RE_NO_MEMBER_TEMPLATES @@ -538,7 +549,7 @@ typedef unsigned long jm_uintfast32_t; #define BOOST_RE_NO_BOOL #endif - #if _RWSTD_VER > 0x020000 + #if BOOST_RWSTD_VER > 0x020000 #ifdef _RWSTD_NO_CLASS_PARTIAL_SPEC #define BOOST_RE_DISTANCE(i, j, n) do { n = 0; std::distance(i, j, n); } while(false) #else @@ -552,7 +563,7 @@ typedef unsigned long jm_uintfast32_t; #else #define BOOST_RE_DISTANCE(i, j, n) std::distance(i, j, n)do { n = 0; std::distance(i, j, n); } while(false) #define BOOST_RE_OUTPUT_ITERATOR(T, D) std::output_iterator - #if _RWSTD_VER >= 0x0200 + #if BOOST_RWSTD_VER >= 0x0200 #define BOOST_RE_INPUT_ITERATOR(T, D) std::input_iterator #else #define BOOST_RE_INPUT_ITERATOR(T, D) std::input_iterator @@ -592,7 +603,7 @@ typedef unsigned long jm_uintfast32_t; #endif #define BOOST_RE_STL_DONE - #if _RWSTD_VER < 0x020100 + #if BOOST_RWSTD_VER < 0x020100 #define BOOST_RE_NO_OI_ASSIGN #endif diff --git a/src/cpp_regex_traits.cpp b/src/cpp_regex_traits.cpp index 287dff40..b189d008 100644 --- a/src/cpp_regex_traits.cpp +++ b/src/cpp_regex_traits.cpp @@ -544,6 +544,9 @@ struct message_data std::string error_strings[boost::REG_E_UNKNOWN+1]; message_data(const std::locale& l, const std::string& regex_message_catalogue); +private: + message_data(const message_data&); + message_data& operator=(const message_data&); }; message_data::message_data(const std::locale& l, const std::string& regex_message_catalogue) diff --git a/src/w32_regex_traits.cpp b/src/w32_regex_traits.cpp index 845be137..9d2823ad 100644 --- a/src/w32_regex_traits.cpp +++ b/src/w32_regex_traits.cpp @@ -651,12 +651,12 @@ bool BOOST_RE_CALL w32_regex_traits::do_iswclass(wchar_t c, jm_uintfast if(c < 256) return BOOST_RE_MAKE_BOOL(re_detail::wide_unicode_classes[c] & f); WORD mask; - if(isPlatformNT && GetStringTypeW(CT_CTYPE1, &c, 1, &mask)) - return BOOST_RE_MAKE_BOOL(mask & f); - else if(f & char_class_unicode) + if(f & char_class_unicode) return true; else if((f & char_class_graph) == char_class_graph) - return true; + return true; // all wide characters are considered "graphics" + else if(isPlatformNT && GetStringTypeW(CT_CTYPE1, &c, 1, &mask)) + return BOOST_RE_MAKE_BOOL(mask & f); return false; }