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.