ConceptC++ Concept Web

Concept InputIterator

concept InputIterator<typename X> 
  : IteratorAssociatedTypes, CopyConstructible, EqualityComparable {
 
  requires Assignable, SameType<Assignable::result_type, X&>;
 
  requires SignedIntegral,
           Convertible,
           Convertibleconst value_type*>;
 
  typename postincrement_result;
  requires Dereferenceable, 
           Convertible<Dereferenceable::reference, value_type>;
 
  pointer operator->(X);
  X& operator++(X&);
  postincrement_result operator++(X&, int);
  reference operator*(X);
 
  bool operator!=(X, X);
};

Where Defined

#include <iterator>

Description

In the InputIterator concept, the term the domain of == is used in the ordinary mathematical sense to denote the set of values over which == is (required to be) defined. This set can change over time. Each algorithm places additional requirements on the domain of == for the iterator values it uses. These requirements can be inferred from the uses that algorithm makes of == and !=.
[ Example: the call find(a,b,x) is defined only if the value of a has the property p defined as follows: b has property p and a value i has property p if (*i==x) or if (*i!=x and ++i has property p). - end example ]

[ Note: For input iterators, a == b does not imply ++a == ++b. (Equality does not guarantee the substitution property or referential transparency.) Algorithms on input iterators should never attempt to pass through the same iterator twice. They should be single pass algorithms. These algorithms can be used with istreams as the source of the input data through the istream_iterator class. - end note ]

reference operator*(X a );

Requires: a is dereferenceable.

Remarks: If b is a value of type X, a == b and (a, b) is in the domain of == then *a is equivalent to *b.

pointer operator->(X a);

Requires: (*a ).m is well-defined