cpp/experimental/ranges/iterator/iterator category

Computes the iterator category of the class, if any. Users may specialize for a program-defined type.

@1@ Primary template is an empty struct. @2@ Specialization for pointers. If is an object type, provides a member type  equal to ranges. Otherwise, there is no member. @3@ Specialization for const-qualified types. @4@ Specialization for types that define a public and accessible member type. If is the same as or derived from one of iterator category tags in namespace, it is mapped to the corresponding tag in the namespace  as described below. Otherwise, provides a member type equal to.
 * If is the same as or derives from std, provides a member type  equal to ranges.
 * Otherwise, if is the same as or derives from std, provides a member type  equal to ranges.
 * Otherwise, if is the same as or derives from std, provides a member type  equal to ranges.
 * Otherwise, if is the same as or derives from std, provides a member type  equal to ranges.
 * Otherwise, if is the same as or derives from std, there is no member.