namespace boost {
namespace algorithm {
template<typename patIter> class knuth_morris_pratt;
template<typename patIter, typename corpusIter>
corpusIter knuth_morris_pratt_search(corpusIter, corpusIter, patIter,
patIter);
template<typename PatternRange, typename corpusIter>
corpusIter knuth_morris_pratt_search(corpusIter corpus_first,
corpusIter corpus_last,
const PatternRange & pattern);
template<typename patIter, typename CorpusRange>
boost::lazy_disable_if_c< boost::is_same< CorpusRange, patIter >::value, typename boost::range_iterator< CorpusRange > >::type
knuth_morris_pratt_search(CorpusRange & corpus, patIter pat_first,
patIter pat_last);
template<typename PatternRange, typename CorpusRange>
boost::range_iterator< CorpusRange >::type
knuth_morris_pratt_search(CorpusRange & corpus,
const PatternRange & pattern);
template<typename Range>
boost::algorithm::knuth_morris_pratt< typename boost::range_iterator< const Range >::type >
make_knuth_morris_pratt(const Range & r);
template<typename Range>
boost::algorithm::knuth_morris_pratt< typename boost::range_iterator< Range >::type >
make_knuth_morris_pratt(Range & r);
}
}