3) I'd vote for non-member transcoding utility. This was an issue when I
did my experiment with changing DOMString to have a subset of
std::basic_string<XMLCh> semantics. Sample code was doing something like
DOMString a("A");
Where a std::basic_string constructor was lost with the char* to XMLCh*
conversion. However, taking out to char* constructor will break some code
(but probably mostly code that should be broken).
4) I'd vote for reserve since it parallels std::basic_string
5) I don't have my std lib documentation handy, but I think it is erase in
std::basic_string.
I'd also add an empty() (ala basic_string) method that is used to determine
if the string is empty.