struct input_iterator_tag {};| property | valid expressions | 
|---|---|
| Is copy-constructible, copy-assignable and destructible | X b(a); | 
| Can be compared for equivalence using the equality/inequality operators (meaningful if both iterators are be in domain).  | a == b | 
| Can be dereferenced as an rvalue (if in a dereferenceable state). | *a | 
| Can be incremented (if in a dereferenceable state). The result is either also dereferenceable or a past-the-end iterator. The previous iterator value is not required to be dereferenceable after the increase.  | ++a | 
| Its value type does not need to be assignable | t = u not required | 
| property | valid expressions | 
|---|---|
| Is copy-constructible, copy-assignable and destructible | X b(a); | 
| Can be compared for equivalence using the equality/inequality operators (meaningful if both iterators are be in domain).  | a == b | 
| Can be dereferenced as an rvalue (if in a dereferenceable state). | *a | 
| Can be incremented (if in a dereferenceable state). The result is either also dereferenceable or a past-the-end iterator. The previous iterator value is not required to be dereferenceable after the increase.  | ++a | 
| Its value type does not need to be assignable | t = u not required | 
| Lvalues are swappable. | swap(a,b) |