cpp/ranges/subrange/subrange

Constructs a.

If, the size of the range is stored into the , as if stored by a member subobject of type , where is an exposition-only alias template that maps each integer-like type to its corresponding unsigned version. Otherwise, the size is not stored. The constant is  if the size is stored,  otherwise.

@1@ Default constructor. Value-initializes the stored iterator and sentinel as if by default member initializers and, respectively. If the size is stored, it is initialized with as if by the default member initializer.

@2@ Constructs a from an iterator-sentinel pair. Initializes the stored iterator and sentinel with and  respectively. The behavior is undefined if is not a valid range.

@3@ Constructs a from an iterator-sentinel pair and a size hint. Initializes the stored iterator and sentinel with and  respectively. If the size is stored, it is initialized with. The behavior is undefined if is not a valid range, or  is not equal to  explicitly converted to its type.

@4@ Constructs a from a range. Equivalent to if the size is stored. Otherwise, equivalent to.

@5@ Constructs a from a range and a size hint. The behavior is undefined if is not equal to  explicitly converted to its type.

The exposition only concept is modeled by types  and  if and only if  and  are different types.

The exposition only concept is satisfied or modeled by  and  if and only if  is satisfied or modeled respectively, and ​any of following conditions is satisfied:
 * either or  is not a pointer type,
 * is implicitly convertible to, i.e., the conversion from to  is at most a qualification conversion.