void initialize() {
     if(valid_) return;
     f_.reset();
     valid_ = (begin_ != end_)?
              f_(begin_,end_,tok_):false;
 }
 void initialize(Base& b){
     if(b.valid_) return;
     func_.reset();
     b.valid_ = (b.p_.first != b.p_.second)?
         func_(b.p_.first,b.p_.second,tok_):false;
 }