Bidirectional Traversal Concept ............................... A class or built-in type ``X`` models the *Bidirectional Traversal* concept if, in addition to ``X`` meeting the requirements of Forward Traversal Iterator, the following expressions are valid and respect the stated semantics. +--------------------------------------------------------------------------------------+ |Bidirectional Traversal Iterator Requirements (in addition to Forward Traversal | |Iterator) | +--------------------------------+-------------------------------+---------------------+ |Expression |Return Type |Assertion/Semantics /| | | |Pre-/Post-condition | +================================+===============================+=====================+ |``--r`` |``X&`` |pre: there exists | | | |``s`` such that ``r | | | |== ++s``. post: | | | |``s`` is | | | |dereferenceable. | | | |``--(++r) == r``. | | | |``--r == --s`` | | | |implies ``r == | | | |s``. ``&r == &--r``. | +--------------------------------+-------------------------------+---------------------+ |``r--`` |convertible to ``const X&`` |:: | | | | | | | | { | | | | X tmp = r; | | | | --r; | | | | return tmp; | | | | } | +--------------------------------+-------------------------------+---------------------+ |``iterator_traversal::type`` |Convertible to | | | |``bidirectional_traversal_tag``| | | | | | +--------------------------------+-------------------------------+---------------------+