namespace boost {
  namespace algorithm {
    
    template<typename BidirectionalIterator, typename Pred> 
      std::pair< BidirectionalIterator, BidirectionalIterator > 
      gather(BidirectionalIterator first, BidirectionalIterator last, 
             BidirectionalIterator pivot, Pred pred);
    
    template<typename BidirectionalRange, typename Pred> 
      std::pair< typename boost::range_iterator< const BidirectionalRange >::type, typename boost::range_iterator< const BidirectionalRange >::type > 
      gather(const BidirectionalRange & range, 
             typename boost::range_iterator< const BidirectionalRange >::type pivot, 
             Pred pred);
  }
}