inline iterator_range< BOOST_STRING_TYPENAME range_iterator<RangeT>::type> find_tail( RangeT& Input, int N) { return find(Input, tail_finder(N)); }
inline void erase_tail( SequenceT& Input, int N ) { find_format( Input, tail_finder(N), empty_formatter( Input ) ); }
inline SequenceT erase_tail_copy( const SequenceT& Input, int N ) { return find_format_copy( Input, tail_finder(N), empty_formatter( Input ) ); }
inline iterator_range< BOOST_STRING_TYPENAME result_iterator_of<CollectionT>::type> find_tail( CollectionT& Input, unsigned int N) { return tail_finder(N)( begin(Input),end(Input)); }
inline iterator_range< BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type> find_tail( RangeT& Input, int N) { return tail_finder(N)( begin(Input),end(Input)); }
inline void replace_tail( SequenceT& Input, unsigned int N, const RangeT& Format ) { find_format( Input, tail_finder(N), const_formatter(Format) ); }
inline SequenceT replace_tail_copy( const SequenceT& Input, unsigned int N, const RangeT& Format ) { return find_format_copy( Input, tail_finder(N), const_formatter(Format) ); }
inline OutputIteratorT erase_tail_copy( OutputIteratorT Output, const RangeT& Input, int N ) { return find_format_copy( Output, Input, tail_finder(N), empty_formatter( Input ) ); }
inline OutputIteratorT replace_tail_copy( OutputIteratorT Output, const Range1T& Input, unsigned int N, const Range2T& Format ) { return find_format_copy( Output, Input, tail_finder(N), const_formatter(Format) ); }