void
test_exceptions(S s, It first, It last)
{
- S aCopy = s;
+ S original = s;
+ typename S::iterator begin = s.begin();
+ typename S::iterator end = s.end();
+
try {
s.append(first, last);
assert(false);
- }
- catch (...) {}
+ } catch (...) {}
+
+ // Part of "no effects" is that iterators and pointers
+ // into the string must not have been invalidated.
LIBCPP_ASSERT(s.__invariants());
- assert(s == aCopy);
+ assert(s == original);
+ assert(s.begin() == begin);
+ assert(s.end() == end);
}
#endif
void
test_exceptions(S s, It first, It last)
{
- S aCopy = s;
+ S original = s;
+ typename S::iterator begin = s.begin();
+ typename S::iterator end = s.end();
+
try {
s.assign(first, last);
assert(false);
- }
- catch (...) {}
+ } catch (...) {}
+
+ // Part of "no effects" is that iterators and pointers
+ // into the string must not have been invalidated.
LIBCPP_ASSERT(s.__invariants());
- assert(s == aCopy);
+ assert(s == original);
+ assert(s.begin() == begin);
+ assert(s.end() == end);
}
#endif
test_exceptions(S s, typename S::difference_type pos, It first, It last)
{
typename S::const_iterator p = s.cbegin() + pos;
- S aCopy = s;
+
+ S original = s;
+ typename S::iterator begin = s.begin();
+ typename S::iterator end = s.end();
+
try {
s.insert(p, first, last);
assert(false);
- }
- catch (...) {}
+ } catch (...) {}
+
+ // Part of "no effects" is that iterators and pointers
+ // into the string must not have been invalidated.
LIBCPP_ASSERT(s.__invariants());
- assert(s == aCopy);
+ assert(s == original);
+ assert(s.begin() == begin);
+ assert(s.end() == end);
}
#endif
{
typename S::const_iterator first = s.begin() + pos1;
typename S::const_iterator last = s.begin() + pos1 + n1;
- S aCopy = s;
+
+ S original = s;
+ typename S::iterator begin = s.begin();
+ typename S::iterator end = s.end();
+
try {
s.replace(first, last, f, l);
assert(false);
- }
- catch (...) {}
+ } catch (...) {}
+
+ // Part of "no effects" is that iterators and pointers
+ // into the string must not have been invalidated.
LIBCPP_ASSERT(s.__invariants());
- assert(s == aCopy);
+ assert(s == original);
+ assert(s.begin() == begin);
+ assert(s.end() == end);
}
#endif