virtual bool empty() const { return l.empty() && r.empty(); }
virtual bool empty() const { return r.empty(); }
virtual void popFront() { do { r.popFront(); } while (!r.empty() && !p(r.front())); }
RangeFilter(const R &_r, const P &_p) : r(_r), p(_p) { if (!r.empty() && !p(r.front())) { this->popFront(); } }