#include <iostream>
#include <string>
#include <assert.h>
template <class Chunkedseq, class UnaryPredicate>
void pcopy_if(
typename Chunkedseq::iterator first,
 
              typename Chunkedseq::iterator last,
              Chunkedseq& destination,
              const UnaryPredicate& pred) {
  using iterator = typename Chunkedseq::iterator;
  using ptr = typename Chunkedseq::const_pointer;
  
  const long cutoff = 8192;
  
  long sz = last.size() - first.size();
  
  if (sz <= cutoff) {
    
    
      for (ptr p = lo; p < hi; p++) {
        if (pred(v))
          destination.push_back(v);
      }
    });
    
  } else {
    
    
    iterator mid = first + (sz/2);
    
    Chunkedseq destination2;
    
    
    
    pcopy_if(first, mid,  destination,  pred);
 
    pcopy_if(mid,   last, destination2, pred);
 
    
    destination.concat(destination2);
  }
}
int main(
int argc, 
const char * argv[]) {
 
  
  const int chunk_size = 2;
  
  
  pcopy_if(mydeque.
begin(), mydeque.
end(), mydeque2, [] (
int i) { 
return i%2==0; });
 
  
  std::cout << "mydeque2 contains:";
  auto p = mydeque2.
begin();
 
  while (p != mydeque2.
end())
 
    std::cout << " " << *p++;
  std::cout << std::endl;
  
  return 0;
  
}