Index: branches/release/boost/multi_array/base.hpp =================================================================== --- a/branches/release/boost/multi_array/base.hpp +++ b/branches/release/boost/multi_array/base.hpp @@ -18,6 +18,7 @@ // functionality is acquired // +#include "boost/multi_array/collection_concept.hpp" #include "boost/multi_array/extent_range.hpp" #include "boost/multi_array/extent_gen.hpp" #include "boost/multi_array/index_range.hpp" @@ -252,5 +253,17 @@ ///////////////////////////////////////////////////////////////////////// - +// Due to some imprecision in the C++ Standard, +// MSVC 2010 is broken in debug mode: it requires +// that an Output Iterator have output_iterator_tag in its iterator_category if +// that iterator is not bidirectional_iterator or random_access_iterator. +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1600) +struct mutable_iterator_tag + : boost::random_access_traversal_tag, std::input_iterator_tag +{ + operator std::output_iterator_tag() const { + return std::output_iterator_tag(); + } +}; +#endif //////////////////////////////////////////////////////////////////////// @@ -322,5 +343,6 @@ const index* strides, const index* index_bases) const { - + boost::function_requires< + detail::multi_array::CollectionConcept >(); ignore_unused_variable_warning(index_bases); ignore_unused_variable_warning(extents); Index: branches/release/boost/multi_array/concept_checks.hpp =================================================================== --- a/branches/release/boost/multi_array/concept_checks.hpp +++ b/branches/release/boost/multi_array/concept_checks.hpp @@ -132,4 +132,5 @@ function_requires< boost_concepts::ForwardTraversalConcept >(); function_requires< boost_concepts::ReadableIteratorConcept >(); + function_requires< boost::OutputIterator >(); // RG - a( CollectionArchetype) when available...