Index: iterator.hpp =================================================================== --- iterator.hpp (revision 84053) +++ iterator.hpp (working copy) @@ -143,7 +143,6 @@ struct iterator< ::boost::no_traversal_tag, T, Reference, DifferenceType, ValueType> : boost::mpl::vector< copy_constructible, - constructible, equality_comparable, dereferenceable::type, T>, assignable @@ -157,7 +156,7 @@ template struct iterator< ::boost::incrementable_traversal_tag, T, Reference, DifferenceType, ValueType> : boost::mpl::vector< - iterator< ::boost::no_traversal_tag, T, Reference, DifferenceType>, + iterator< ::boost::no_traversal_tag, T, Reference, DifferenceType, ValueType>, incrementable > { @@ -173,13 +172,23 @@ template struct iterator< ::boost::forward_traversal_tag, T, Reference, DifferenceType, ValueType> : - iterator< ::boost::incrementable_traversal_tag, T, Reference, DifferenceType, ValueType> -{}; + boost::mpl::vector< + iterator< ::boost::no_traversal_tag, T, Reference, DifferenceType, ValueType>, + incrementable, + constructible + > +{ + typedef ValueType value_type; + typedef typename iterator_reference::type reference; + typedef DifferenceType difference_type; +}; template struct iterator< ::boost::bidirectional_traversal_tag, T, Reference, DifferenceType, ValueType> : boost::mpl::vector< - iterator< ::boost::incrementable_traversal_tag, T, Reference, DifferenceType, ValueType>, + iterator< ::boost::no_traversal_tag, T, Reference, DifferenceType, ValueType>, + incrementable, + constructible, decrementable > { @@ -191,7 +200,10 @@ template struct iterator< ::boost::random_access_traversal_tag, T, Reference, DifferenceType, ValueType> : boost::mpl::vector< - iterator< ::boost::bidirectional_traversal_tag, T, Reference, DifferenceType, ValueType>, + iterator< ::boost::no_traversal_tag, T, Reference, DifferenceType, ValueType>, + incrementable, + constructible, + decrementable, addable, addable, subtractable, @@ -256,6 +268,20 @@ }; template +struct concept_interface, Base, T> + : Base +{ + typedef std::output_iterator_tag iterator_category; +}; + +template +struct concept_interface, Base, T> + : Base +{ + typedef std::input_iterator_tag iterator_category; +}; + +template struct concept_interface, Base, T> : Base {