No, sensible implementations may not be redistributed, but the standard does not guarantee that calls to these methods are not redistributed, the standard says about the requirements:
References, pointers, and iterators related to basic_string elements can be invalidated in the following ways: this basic_string object:
(4.1) as an argument to any standard library function referencing a non-const basic_string as an argument .227
(4.2) Calling non-constant member functions, except for the operator [], at, data, front, back, begin, rbegin, end and rend .
Both proposed methods belong to category 2 and, therefore, both can change capacity() , which would imply redistribution.
pop_back should have the same effect as erase , since erase is listed as:
Effects: defines the effective length xlen of the string, which should be removed as less than n and size() - pos . 3
The function then replaces the string controlled by *this with a string of length size() - xlen , whose first elements of pos are a copy of the initial elements of the original string controlled by *this , and the remaining elements of which are a copy of the original string controlled by *this , starting at pos + xlen .
There is no guarantee as to how this copy is made, so additional distributions or redistributions are possible.
Concerning
Can this be considered a guarantee that these methods do NOT redistribute? Since redistribution can cause bad_alloc .
The standard does not explicitly mention the bad_alloc feature bad_alloc by any of the methods. Even with reserve binding, this is not mentioned:
void reserve(size_type res_arg=0);
Throws: length_error if res_arg > max_size()
Thus, I do not think that this assumption can be made.