$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r79763 - in trunk/boost/xpressive: . detail/static
From: eric_at_[hidden]
Date: 2012-07-26 21:37:09
Author: eric_niebler
Date: 2012-07-26 21:37:08 EDT (Thu, 26 Jul 2012)
New Revision: 79763
URL: http://svn.boost.org/trac/boost/changeset/79763
Log:
only string iterators point to contiguous data
Text files modified: 
   trunk/boost/xpressive/detail/static/type_traits.hpp |    37 +++++++++++++++++++++++++++++++++++++   
   trunk/boost/xpressive/regex_actions.hpp             |     4 +++-                                    
   2 files changed, 40 insertions(+), 1 deletions(-)
Modified: trunk/boost/xpressive/detail/static/type_traits.hpp
==============================================================================
--- trunk/boost/xpressive/detail/static/type_traits.hpp	(original)
+++ trunk/boost/xpressive/detail/static/type_traits.hpp	2012-07-26 21:37:08 EDT (Thu, 26 Jul 2012)
@@ -13,6 +13,8 @@
 # pragma once
 #endif
 
+#include <string>
+#include <boost/config.hpp>
 #include <boost/mpl/bool.hpp>
 #include <boost/iterator/iterator_traits.hpp>
 #include <boost/type_traits/is_convertible.hpp>
@@ -55,6 +57,41 @@
 {
 };
 
+//////////////////////////////////////////////////////////////////////////
+// is_string_iterator
+//
+template<typename Iter>
+struct is_string_iterator
+  : mpl::false_
+{
+};
+
+template<>
+struct is_string_iterator<std::string::iterator>
+  : mpl::true_
+{
+};
+
+template<>
+struct is_string_iterator<std::string::const_iterator>
+  : mpl::true_
+{
+};
+
+#ifndef BOOST_NO_STD_WSTRING
+template<>
+struct is_string_iterator<std::wstring::iterator>
+  : mpl::true_
+{
+};
+
+template<>
+struct is_string_iterator<std::wstring::const_iterator>
+  : mpl::true_
+{
+};
+#endif
+
 ///////////////////////////////////////////////////////////////////////////////
 // is_char
 //
Modified: trunk/boost/xpressive/regex_actions.hpp
==============================================================================
--- trunk/boost/xpressive/regex_actions.hpp	(original)
+++ trunk/boost/xpressive/regex_actions.hpp	2012-07-26 21:37:08 EDT (Thu, 26 Jul 2012)
@@ -572,12 +572,14 @@
                   : boost::lexical_cast<T>("");
             }
 
+            #ifndef BOOST_XPRESSIVE_NO_WREGEX
             T operator()(wcsub_match const &val) const
             {
                 return val.matched
                   ? boost::lexical_cast<T>(boost::make_iterator_range(val.first, val.second))
                   : boost::lexical_cast<T>("");
             }
+            #endif
 
             template<typename BidiIter>
             T operator()(sub_match<BidiIter> const &val) const
@@ -590,7 +592,7 @@
                   , CAN_ONLY_CONVERT_FROM_CHARACTER_SEQUENCES
                   , (char_type)
                 );
-                return this->impl(val, xpressive::detail::is_random<BidiIter>());
+                return this->impl(val, xpressive::detail::is_string_iterator<BidiIter>());
             }
 
         private: