cpp/iterator/iterator tags

Defines the category of an iterator. Each tag is an empty type.

Iterator category
For every type, a   must be defined to be an alias to one of these tag types, to indicate the most specific category that  is in.


 * 1)  corresponds to.
 * 2)  corresponds to.
 * 3)  corresponds to.
 * 4)  corresponds to.
 * 5)  corresponds to.

Iterator category tags carry information that can be used to select the most efficient algorithms for the specific requirement set that is implied by the category.

{{rrev|since=c++20|

Iterator concept
For every type, either  (if  is generated from primary template) or  (if  is specialized) may be declared as an alias to one of these tags, to indicate the strongest iterator concept that  intends to model.


 * 1)  corresponds to.
 * 2)  corresponds to.
 * 3)  corresponds to.
 * 4)  corresponds to.
 * 5)  corresponds to.

If is not provided,  is used as a fallback. If is not provided either (i.e.  is not a ),  and  is not specialized,  is assumed.

In any case, each concept is not satisfied if the required operations are not supported, regardless of the tag. }}