namespace std::ranges {
template<class R>
concept bidirectional-common = bidirectional_range<R> && common_range<R>;
template<input_range V, forward_range Pattern>
requires view<V> && input_range<range_reference_t<V>>
&& view<Pattern>
&& concatable<range_reference_t<V>, Pattern>
class join_with_view : public view_interface<join_with_view<V, Pattern>> {
using InnerRng = range_reference_t<V>;
V base_ = V();
non-propagating-cache<iterator_t<V>> outer_it_;
non-propagating-cache<remove_cv_t<InnerRng>> inner_;
Pattern pattern_ = Pattern();
constexpr explicit join_with_view(V base, Pattern pattern);
Effects: Initializes
base_ with
std::move(base) and
pattern_ with
std::move(pattern). Effects: Initializes
base_ with
views::all(std::forward<R>(r)) and
pattern_ with
views::single(std::move(e)).