Let E and F be expressions,
let T be remove_cvref_t<decltype((E))>, and
let D be range_difference_t<decltype((E))>.

Otherwise, the expression views::take(E, F)
is expression-equivalent to:

- If T is a specialization of ranges::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]) where T::extent == dynamic_extent,
- a specialization of basic_string_view ([string.view]),
- a specialization of ranges::iota_view ([range.iota.view]), or
- a specialization of ranges::subrange ([range.subrange]),

- Otherwise, ranges::take_view(E, F).