$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: jefffaust_at_[hidden]
Date: 2007-05-31 01:39:21
Author: jefffaust
Date: 2007-05-31 01:39:21 EDT (Thu, 31 May 2007)
New Revision: 4376
URL: http://svn.boost.org/trac/boost/changeset/4376
Log:
Use full implementation provided by Danny to determine if something is an associative iterator.
Text files modified: 
   sandbox/explore/boost/explore/is_assoc_iter.hpp |    24 +++++++++++++++++++++++-                
   1 files changed, 23 insertions(+), 1 deletions(-)
Modified: sandbox/explore/boost/explore/is_assoc_iter.hpp
==============================================================================
--- sandbox/explore/boost/explore/is_assoc_iter.hpp	(original)
+++ sandbox/explore/boost/explore/is_assoc_iter.hpp	2007-05-31 01:39:21 EDT (Thu, 31 May 2007)
@@ -12,8 +12,11 @@
 #ifndef STREAM_IS_ASSOC_ITER_INCLUDED
 #define STREAM_IS_ASSOC_ITER_INCLUDED
 
+#include <map>
 #include <boost/mpl/bool.hpp>
 #include <boost/mpl/eval_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_const.hpp>
 
 namespace explore
 {
@@ -54,6 +57,24 @@
 
         template<typename T>
         struct value_type_is_pair : is_pair<typename T::value_type> {};
+
+        template< typename value_t, typename iterator_t>
+        struct pair_matches_map : boost::mpl::false_ {};
+
+        template< typename F, typename S, typename iterator_t>
+        struct pair_matches_map< std::pair< F, S>, iterator_t> :
+            boost::is_same<
+                iterator_t,
+                typename std::map<
+                    typename boost::remove_const<F>::type,
+                    S
+                >::iterator
+            >
+        {};
+
+        template <typename T>
+        struct value_matches_map :
+            pair_matches_map< typename T::value_type, T> {};
     }
 
     // an associative iterator has a value type of pair<>
@@ -61,7 +82,8 @@
     struct is_assoc_iter :
         boost::mpl::eval_if<
             detail::has_value_type<T>,
-            detail::value_type_is_pair<T>,
+//            detail::value_type_is_pair<T>,
+            detail::value_matches_map<T>,
             boost::mpl::false_
         > {};
 }