S is a specialization of extent_slice and
is_convertible_v<X, IndexType> is true for X denoting
S::offset_type,
S::extent_type, and
S::stride_type;
S is a specialization of range_slice and
is_convertible_v<X, IndexType> is true for X denoting type of
S::first,
S::last, and
S::stride members; or
Given a signed or unsigned integer type IndexType,
a type S is a
canonical submdspan index type for IndexType
if S is either IndexType or constant_wrapper<v>
for some value v of type IndexType,
such that v is greater than or equal to zero.
Given an object e of type E that is a specialization of extents, and
an object s of type S
that is a canonical submdspan slice type for E::index_type,
the submdspan slice range of s for the kth extent of e
is:
Given a type E that is a specialization of extents,
a type S is a
valid submdspan slice type for the kth extent of E
if S is a canonical slice type for E::index_type, and
for x equal to E::static_extent(k),
either x is equal to dynamic_extent; or