template<class... Rs>
concept concat-indirectly-readable = see below; // exposition only
template<class... Rs>
concept concatable = see below; // exposition only
template<bool Const, class... Rs>
concept concat-is-random-access = see below; // exposition only
template<bool Const, class... Rs>
concept concat-is-bidirectional = see below; // exposition only
constexpr explicit concat_view(Views... views);
constexpr iterator<false> begin() requires (!(simple-view<Views> && ...));
constexpr iterator<true> begin() const
requires (range<const Views> && ...) && concatable<const Views...>;
constexpr auto end() requires (!(simple-view<Views> && ...));
constexpr auto end() const
requires (range<const Views> && ...) && concatable<const Views...>;
constexpr auto size() requires (sized_range<Views> && ...);
constexpr auto size() const requires (sized_range<const Views> && ...);