The view concept specifies the requirements of a range type
that has the semantic properties below,
which make it suitable for use in
constructing range adaptor pipelines ([range.adaptors]).
A range type that generates its elements on demand.
A container such as vector<string>
does not meet the semantic requirements of view
since copying the container copies all of the elements,
which cannot be done in constant time.
For a type T,
is-derived-from-view-interface<T> is true
if and only if
T has exactly one public base class view_interface<U>
for some type U and
T has no base classes of type view_interface<V>
for any other type V.
Remarks: Pursuant to [namespace.std], users may specialize enable_view
to true
for cv-unqualified program-defined types which model view,
and false for types which do not.
Such specializations shall
be usable in constant expressions ([expr.const]) and
have type constbool.