boost::text::subrange
// In header: <boost/text/subrange.hpp> template<std::forward_iterator I, std::sentinel_for< I > S = I> struct subrange : public stl_interfaces::view_interface< subrange< I, I > > { // construct/copy/destruct subrange() = default; subrange(I, S); template<typename R> explicit subrange(R const &); // public member functions constexpr I begin() const; constexpr S end() const; constexpr subrange next(std::ptrdiff_t = 1) const; constexpr subrange prev(std::ptrdiff_t = 1) const; constexpr subrange & advance(std::ptrdiff_t); template<typename I2, typename S2, typename Enable = std::enable_if_t< std::is_convertible<I, I2>::value && std::is_convertible<S, S2>::value> > constexpr operator subrange< I2, S2 >() const; };
subrange
public member functionsconstexpr I begin() const;
constexpr S end() const;
constexpr subrange next(std::ptrdiff_t n = 1) const;
constexpr subrange prev(std::ptrdiff_t n = 1) const;
constexpr subrange & advance(std::ptrdiff_t n);
template<typename I2, typename S2, typename Enable = std::enable_if_t< std::is_convertible<I, I2>::value && std::is_convertible<S, S2>::value> > constexpr operator subrange< I2, S2 >() const;