#include <deque>
#include <iterator>
#include <iostream>
+#include <cstddef> // std::ptrdiff_t
#include <boost/static_assert.hpp>
#include <boost/noncopyable.hpp>
#include <boost/iterator/is_readable_iterator.hpp>
-#include <boost/iterator.hpp>
// Last, for BOOST_NO_LVALUE_RETURN_DETECTION
#include <boost/iterator/detail/config_def.hpp>
};
-struct value_iterator : boost::iterator<std::input_iterator_tag,v>
+struct value_iterator
{
+ typedef std::input_iterator_tag iterator_category;
+ typedef v value_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef v* pointer;
+ typedef v& reference;
+
v operator*() const;
};
-struct noncopyable_iterator : boost::iterator<std::forward_iterator_tag,boost::noncopyable>
+struct noncopyable_iterator
{
+ typedef std::forward_iterator_tag iterator_category;
+ typedef boost::noncopyable value_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef boost::noncopyable* pointer;
+ typedef boost::noncopyable& reference;
+
boost::noncopyable const& operator*() const;
};
-struct proxy_iterator : boost::iterator<std::output_iterator_tag,v>
+struct proxy_iterator
{
-#if BOOST_WORKAROUND(__GNUC__, == 2)
- typedef boost::iterator<std::input_iterator_tag,v> base;
- typedef base::iterator_category iterator_category;
- typedef base::value_type value_type;
- typedef base::difference_type difference_type;
- typedef base::pointer pointer;
- typedef base::reference reference;
-#endif
+ typedef std::output_iterator_tag iterator_category;
+ typedef v value_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef v* pointer;
+ typedef v& reference;
struct proxy
{
proxy operator*() const;
};
-struct proxy_iterator2 : boost::iterator<std::output_iterator_tag,v>
+struct proxy_iterator2
{
-#if BOOST_WORKAROUND(__GNUC__, == 2)
- typedef boost::iterator<std::input_iterator_tag,v> base;
- typedef base::iterator_category iterator_category;
- typedef base::value_type value_type;
- typedef base::difference_type difference_type;
- typedef base::pointer pointer;
- typedef base::reference reference;
-#endif
+ typedef std::output_iterator_tag iterator_category;
+ typedef v value_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef v* pointer;
+ typedef v& reference;
struct proxy
{