void do_filter(const vector_type& src, vector_type& dest) { typedef regex_iterator<const Ch*, Ch, Tr> iterator; if (src.empty()) return; iterator first(&src[0], &src[0] + src.size(), re_, flags_); iterator last; const Ch* suffix = 0; // Prevent GCC 2.95 warning. for (; first != last; ++first) { dest.insert( dest.end(), first->prefix().first, first->prefix().second ); string_type replacement = replace_(*first); dest.insert( dest.end(), replacement.begin(), replacement.end() ); suffix = first->suffix().first; } dest.insert(dest.end(), suffix, &src[0] + src.size()); }