In every specialization basic_string<charT, traits, Allocator>,
the type allocator_traits<Allocator>::value_type shall name the same type
as charT.
Every object of type
basic_string<charT, traits, Allocator> uses an object of type
Allocator to allocate and free storage for the contained charT
objects as needed.
References, pointers, and iterators referring to the elements of a
basic_string sequence may be
invalidated by the following uses of that basic_string object: