If T is a specialization
of empty_view ([range.empty.view]),
then ((void)F, decay-copy(E)),
except that the evaluations of E and F
are indeterminately sequenced.
Otherwise, if T models
random_access_range and sized_range
and is a specialization of
span ([views.span]),
basic_string_view ([string.view]), or
subrange ([range.subrange]),
then
U(ranges::begin(E),
ranges::begin(E)+ std::min<D>(ranges::distance(E), F)),
except that E is evaluated only once,
where U is a type determined as follows:
otherwise, if T is
a specialization of iota_view ([range.iota.view])
that models random_access_range and sized_range,
then
iota_view(*ranges::begin(E),
*(ranges::begin(E)+ std::min<D>(ranges::distance(E), F))),
except that E is evaluated only once.