namespace boost { namespace text { namespace v1 { template<code_point_iter I1, std::sentinel_for< I1 > S1, code_point_iter I2, std::sentinel_for< I2 > S2> std::ranges::subrange< I1 > find(I1, S1, I2, S2); template<code_point_iter I1, code_point_iter I2> std::ranges::subrange< I1 > rfind(I1, I1, I2, I2); template<code_point_iter I1, std::sentinel_for< I1 > S1, code_point_iter I2, std::sentinel_for< I2 > S2> I1 find_first_of(I1, S1, I2, S2); template<code_point_iter I1, code_point_iter I2> I1 find_last_of(I1, I1, I2, I2); template<code_point_iter I1, std::sentinel_for< I1 > S1, code_point_iter I2, std::sentinel_for< I2 > S2> I1 find_first_not_of(I1, S1, I2, S2); template<code_point_iter I1, code_point_iter I2> I1 find_last_not_of(I1, I1, I2, I2); template<code_point_iter I1, std::sentinel_for< I1 > S1, code_point_iter I2, std::sentinel_for< I2 > S2> bool starts_with(I1, S1, I2, S2); template<code_point_iter I1, code_point_iter I2> bool ends_with(I1, I1, I2, I2); template<code_point_iter I1, std::sentinel_for< I1 > S1, code_point_iter I2, std::sentinel_for< I2 > S2> bool contains(I1, S1, I2, S2); template<utf_range_like R1, utf_range_like R2> unspecified find(R1 &&, R2 &&); template<utf_range_like R1, utf_range_like R2> unspecified rfind(R1 &&, R2 &&); template<utf_range_like R1, utf_range_like R2> unspecified find_first_of(R1 &&, R2 &&); template<utf_range_like R1, utf_range_like R2> unspecified find_last_of(R1 &&, R2 &&); template<utf_range_like R1, utf_range_like R2> unspecified find_first_not_of(R1 &&, R2 &&); template<utf_range_like R1, utf_range_like R2> unspecified find_last_not_of(R1 &&, R2 &&); template<utf_range_like R1, utf_range_like R2> bool starts_with(R1 &&, R2 &&); template<utf_range_like R1, utf_range_like R2> bool ends_with(R1 &&, R2 &&); template<utf_range_like R1, utf_range_like R2> bool contains(R1 &&, R2 &&); template<typename CPIter1, typename Sentinel1, typename CPIter2, typename Sentinel2> auto find(CPIter1 first1, Sentinel1 last1, CPIter2 first2, Sentinel2 last2); template<typename CPIter1, typename CPIter2> auto rfind(CPIter1 first1, CPIter1 last1, CPIter2 first2, CPIter2 last2); template<typename CPIter1, typename Sentinel1, typename CPIter2, typename Sentinel2> auto find_first_of(CPIter1 first1, Sentinel1 last1, CPIter2 first2, Sentinel2 last2); template<typename CPIter1, typename CPIter2> auto find_last_of(CPIter1 first1, CPIter1 last1, CPIter2 first2, CPIter2 last2); template<typename CPIter1, typename Sentinel1, typename CPIter2, typename Sentinel2> auto find_first_not_of(CPIter1 first1, Sentinel1 last1, CPIter2 first2, Sentinel2 last2); template<typename CPIter1, typename CPIter2> auto find_last_not_of(CPIter1 first1, CPIter1 last1, CPIter2 first2, CPIter2 last2); template<typename CPIter1, typename Sentinel1, typename CPIter2, typename Sentinel2> auto starts_with(CPIter1 first1, Sentinel1 last1, CPIter2 first2, Sentinel2 last2); template<typename CPIter1, typename CPIter2> auto ends_with(CPIter1 first1, CPIter1 last1, CPIter2 first2, CPIter2 last2); template<typename CPIter1, typename Sentinel1, typename CPIter2, typename Sentinel2> auto contains(CPIter1 first1, Sentinel1 last1, CPIter2 first2, Sentinel2 last2); template<typename Range1, typename Range2> auto find(Range1 && r1, Range2 && r2); template<typename Range1, typename Range2> auto rfind(Range1 && r1, Range2 && r2); template<typename Range1, typename Range2> auto find_first_of(Range1 && r1, Range2 && r2); template<typename Range1, typename Range2> auto find_last_of(Range1 && r1, Range2 && r2); template<typename Range1, typename Range2> auto find_first_not_of(Range1 && r1, Range2 && r2); template<typename Range1, typename Range2> auto find_last_not_of(Range1 && r1, Range2 && r2); template<typename Range1, typename Range2> auto starts_with(Range1 && r1, Range2 && r2); template<typename Range1, typename Range2> auto ends_with(Range1 && r1, Range2 && r2); template<typename Range1, typename Range2> auto contains(Range1 && r1, Range2 && r2); template<typename GraphemeIter1, typename Sentinel1, typename GraphemeIter2, typename Sentinel2> auto find(GraphemeIter1 first1, Sentinel1 last1, GraphemeIter2 first2, Sentinel2 last2); template<typename GraphemeIter1, typename GraphemeIter2> auto rfind(GraphemeIter1 first1, GraphemeIter1 last1, GraphemeIter2 first2, GraphemeIter2 last2); template<typename GraphemeIter1, typename Sentinel1, typename GraphemeIter2, typename Sentinel2> auto find_first_of(GraphemeIter1 first1, Sentinel1 last1, GraphemeIter2 first2, Sentinel2 last2); template<typename GraphemeIter1, typename GraphemeIter2> auto find_last_of(GraphemeIter1 first1, GraphemeIter1 last1, GraphemeIter2 first2, GraphemeIter2 last2); template<typename GraphemeIter1, typename Sentinel1, typename GraphemeIter2, typename Sentinel2> auto find_first_not_of(GraphemeIter1 first1, Sentinel1 last1, GraphemeIter2 first2, Sentinel2 last2); template<typename GraphemeIter1, typename GraphemeIter2> auto find_last_not_of(GraphemeIter1 first1, GraphemeIter1 last1, GraphemeIter2 first2, GraphemeIter2 last2); template<typename GraphemeIter1, typename Sentinel1, typename GraphemeIter2, typename Sentinel2> auto starts_with(GraphemeIter1 first1, Sentinel1 last1, GraphemeIter2 first2, Sentinel2 last2); template<typename GraphemeIter1, typename GraphemeIter2> auto ends_with(GraphemeIter1 first1, GraphemeIter1 last1, GraphemeIter2 first2, GraphemeIter2 last2); template<typename GraphemeIter1, typename Sentinel1, typename GraphemeIter2, typename Sentinel2> auto contains(GraphemeIter1 first1, Sentinel1 last1, GraphemeIter2 first2, Sentinel2 last2); template<typename GraphemeRange1, typename GraphemeRange2> auto find(GraphemeRange1 && r1, GraphemeRange2 && r2); template<typename GraphemeRange, typename Range> auto find(GraphemeRange && r1, Range && r2); template<typename Range, typename GraphemeRange> auto find(Range && r1, GraphemeRange && r2); template<typename GraphemeRange1, typename GraphemeRange2> auto rfind(GraphemeRange1 && r1, GraphemeRange2 && r2); template<typename GraphemeRange, typename Range> auto rfind(GraphemeRange && r1, Range && r2); template<typename Range, typename GraphemeRange> auto rfind(Range && r1, GraphemeRange && r2); template<typename GraphemeRange1, typename GraphemeRange2> auto find_first_of(GraphemeRange1 && r1, GraphemeRange2 && r2); template<typename GraphemeRange, typename Range> auto find_first_of(GraphemeRange && r1, Range && r2); template<typename Range, typename GraphemeRange> auto find_first_of(Range && r1, GraphemeRange && r2); template<typename GraphemeRange1, typename GraphemeRange2> auto find_last_of(GraphemeRange1 && r1, GraphemeRange2 && r2); template<typename GraphemeRange, typename Range> auto find_last_of(GraphemeRange && r1, Range && r2); template<typename Range, typename GraphemeRange> auto find_last_of(Range && r1, GraphemeRange && r2); template<typename GraphemeRange1, typename GraphemeRange2> auto find_first_not_of(GraphemeRange1 && r1, GraphemeRange2 && r2); template<typename GraphemeRange, typename Range> auto find_first_not_of(GraphemeRange && r1, Range && r2); template<typename Range, typename GraphemeRange> auto find_first_not_of(Range && r1, GraphemeRange && r2); template<typename GraphemeRange1, typename GraphemeRange2> auto find_last_not_of(GraphemeRange1 && r1, GraphemeRange2 && r2); template<typename GraphemeRange, typename Range> auto find_last_not_of(GraphemeRange && r1, Range && r2); template<typename Range, typename GraphemeRange> auto find_last_not_of(Range && r1, GraphemeRange && r2); template<typename GraphemeRange1, typename GraphemeRange2> auto starts_with(GraphemeRange1 && r1, GraphemeRange2 && r2); template<typename GraphemeRange, typename Range> auto starts_with(GraphemeRange && r1, Range && r2); template<typename Range, typename GraphemeRange> auto starts_with(Range && r1, GraphemeRange && r2); template<typename GraphemeRange1, typename GraphemeRange2> auto ends_with(GraphemeRange1 && r1, GraphemeRange2 && r2); template<typename GraphemeRange, typename Range> auto ends_with(GraphemeRange && r1, Range && r2); template<typename Range, typename GraphemeRange> auto ends_with(Range && r1, GraphemeRange && r2); template<typename GraphemeRange1, typename GraphemeRange2> auto contains(GraphemeRange1 && r1, GraphemeRange2 && r2); template<typename GraphemeRange, typename Range> auto contains(GraphemeRange && r1, Range && r2); template<typename Range, typename GraphemeRange> auto contains(Range && r1, GraphemeRange && r2); } } }