|  | 
| template<typename C , typename P  = identity> requires (!range<C>)
 | 
| constexpr auto | operator() (C pred, P proj=P{}) const | 
|  | 
| template<typename Rng , typename C , typename P  = identity> requires bidirectional_range<Rng> && common_range<Rng> && permutable<iterator_t<Rng>> && indirect_unary_predicate<C, projected<iterator_t<Rng>, P>> && erasable_range<Rng, iterator_t<Rng>, iterator_t<Rng>>
 | 
| Rng | operator() (Rng &&rng, C pred, P proj=P{}) const | 
|  |