Index: iterator.hpp
===================================================================
--- iterator.hpp	(revision 76373)
+++ iterator.hpp	(working copy)
@@ -44,6 +44,15 @@
   mutable T value_;
 };
 
+struct random_access_traversal_input_output_iterator_tag
+  : boost::random_access_traversal_tag, std::input_iterator_tag
+{
+  operator std::output_iterator_tag() const
+  {
+    return std::output_iterator_tag();
+  }
+};
+
 template <typename T, typename TPtr, typename NumDims, typename Reference>
 class array_iterator;
 
@@ -53,7 +62,7 @@
     iterator_facade<
         array_iterator<T,TPtr,NumDims,Reference>
       , typename associated_types<T,NumDims>::value_type
-      , boost::random_access_traversal_tag
+      , random_access_traversal_input_output_iterator_tag
       , Reference
     >
     , private
@@ -71,7 +80,7 @@
   typedef iterator_facade<
         array_iterator<T,TPtr,NumDims,Reference>
       , typename detail::multi_array::associated_types<T,NumDims>::value_type
-      , boost::random_access_traversal_tag
+      , random_access_traversal_input_output_iterator_tag
       , Reference
     > facade_type;
 
