//! Applies string replacements starting from the specified position result_type operator() (string_type& str, typename string_type::size_type start_pos = 0) const { base_type::operator() (str, start_pos); typedef typename string_type::iterator string_iterator; for (string_iterator it = str.begin() + start_pos, end = str.end(); it != end; ++it) { char_type c = *it; if (c < 0x20 || c > 0x7e) { char_type buf[(std::numeric_limits< char_type >::digits + 3) / 4 + 3]; std::size_t n = traits_type::print_escaped(buf, c); std::size_t pos = it - str.begin(); str.replace(pos, 1, buf, n); it = str.begin() + n - 1; end = str.end(); } } }