aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/bits/basic_string.h
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/include/bits/basic_string.h')
-rw-r--r--libstdc++-v3/include/bits/basic_string.h26
1 files changed, 23 insertions, 3 deletions
diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h
index c843b75efd5..7942c7635e2 100644
--- a/libstdc++-v3/include/bits/basic_string.h
+++ b/libstdc++-v3/include/bits/basic_string.h
@@ -625,14 +625,15 @@ namespace std
{ return this->replace(__i1, __i2, __s, traits_type::length(__s)); }
basic_string&
- replace(iterator __i1, iterator __i2, size_type __n, _CharT __c);
+ replace(iterator __i1, iterator __i2, size_type __n, _CharT __c)
+ { return _M_replace_aux(__i1, __i2, __n, __c); }
template<class _InputIterator>
basic_string&
replace(iterator __i1, iterator __i2,
_InputIterator __k1, _InputIterator __k2)
- { return _M_replace(__i1, __i2, __k1, __k2,
- typename iterator_traits<_InputIterator>::iterator_category()); }
+ { typedef typename _Is_integer<_InputIterator>::_Integral _Integral;
+ return _M_replace_dispatch(__i1, __i2, __k1, __k2, _Integral()); }
// Specializations for the common case of pointer and iterator:
// useful to avoid the overhead of temporary buffering in _M_replace.
@@ -659,6 +660,25 @@ namespace std
}
private:
+ template<class _Integer>
+ basic_string&
+ _M_replace_dispatch(iterator __i1, iterator __i2, _Integer __n,
+ _Integer __val, __true_type)
+ { return _M_replace_aux(__i1, __i2, __n, __val); }
+
+ template<class _InputIterator>
+ basic_string&
+ _M_replace_dispatch(iterator __i1, iterator __i2, _InputIterator __k1,
+ _InputIterator __k2, __false_type)
+ {
+ typedef typename iterator_traits<_InputIterator>::iterator_category
+ _Category;
+ return _M_replace(__i1, __i2, __k1, __k2, _Category());
+ }
+
+ basic_string&
+ _M_replace_aux(iterator __i1, iterator __i2, size_type __n2, _CharT __c);
+
template<class _InputIterator>
basic_string&
_M_replace(iterator __i1, iterator __i2, _InputIterator __k1,