namespace boost {
namespace algorithm {
template<typename patIter> class knuth_morris_pratt;
template<typename patIter, typename corpusIter>
std::pair< corpusIter, corpusIter >
knuth_morris_pratt_search(corpusIter, corpusIter, patIter, patIter);
template<typename PatternRange, typename corpusIter>
std::pair< corpusIter, corpusIter >
knuth_morris_pratt_search(corpusIter corpus_first,
corpusIter corpus_last,
const PatternRange & pattern);
template<typename patIter, typename CorpusRange>
boost::disable_if_c< boost::is_same< CorpusRange, patIter >::value, std::pair< typename boost::range_iterator< CorpusRange >::type, typename boost::range_iterator< CorpusRange >::type > >::type
knuth_morris_pratt_search(CorpusRange & corpus, patIter pat_first,
patIter pat_last);
template<typename PatternRange, typename CorpusRange>
std::pair< typename boost::range_iterator< CorpusRange >::type, typename 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);
}
}