Skip to content

bidirectional_traversal_tag not work with std::prev #47

@tower120

Description

@tower120

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>

class node_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) {}

	explicit node_iterator(int i)
		: m_i(i) {}

private:
	friend class boost::iterator_core_access;

	void increment() { m_i++; }
        void decrement() { m_i--; }

	bool equal(node_iterator const& other) const
	{
		return this->m_i == other.m_i;
	}

	std::pair<int, int> dereference() const { return { m_i, m_i}; }
public:
	int m_i;
};


int main()
{
	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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions