
On 03/07/2017 8:41, Andrzej Krzemienski via Boost wrote:
Those Boost iterators provide two distinct tags: 1. STL-conformant *iterator tag* (in the case of zip-iterator it is
I don't think so. The following example: #include <iostream> #include <boost/iterator/zip_iterator.hpp> #include <boost/tuple/tuple.hpp> template<class Iterator> void print_type(Iterator) { std::cout << typeid(typename Iterator::iterator_category).name() << std::endl; } int main() { const int N=1; int keys[N]; double values[N]; print_type(boost::make_zip_iterator(boost::make_tuple(&keys[0], &values[0]))); return 0; } prints in MSVC 2017 "struct boost::iterators::detail::iterator_category_with_traversal<struct std::input_iterator_tag,struct boost::iterators::random_access_traversal_tag>" instead of "std::input_iterator_tag". That type inherits from "std::input_iterator_tag" but it's not an standard tag type, so IMHO, it's a non-conforming iterator. Best, Ion