In the following code bidirectional_traversal_tag does not work with std::prev. Iterator does not recognized as bidirirectional.
#include<iostream>
#include<boost/iterator/iterator_facade.hpp>classnode_iterator
: public boost::iterator_facade
<
node_iterator
, std::pair<int, int>
, boost::bidirectional_traversal_tag
, std::pair<int, int>
>
{
public:node_iterator()
: m_i(0) {}
explicitnode_iterator(int i)
: m_i(i) {}
private:friendclassboost::iterator_core_access;
voidincrement() { m_i++; }
voiddecrement() { m_i--; }
boolequal(node_iterator const& other) const
{
returnthis->m_i == other.m_i;
}
std::pair<int, int> dereference() const { return { m_i, m_i}; }
public:int m_i;
};
intmain()
{
auto i1 = node_iterator(1);
auto i10 = node_iterator(10);
std::next(i1);
std::prev(i1);
std::cout <<"aaa";
}
Online : https://wandbox.org/permlink/T51UwajOX4Lf8aif
In the following code
bidirectional_traversal_tagdoes not work withstd::prev. Iterator does not recognized as bidirirectional.Online : https://wandbox.org/permlink/T51UwajOX4Lf8aif