ふと思ったんだが。

>>147のって、生のchar*を使うとすれば
char *s = ...;
while (isspace(*s))
 s++;
で、sをずらすだけで済むケースがあるじゃん?

で、同様にstring::c_str()を使ってみると
std::string str = ...;
const char *s = str.c_str();
while (isspace(*s))
 s++;
で、ここで、strに戻す(代入しなおす)わけだが、
sはstrの(実体の)内部を指している。
つまり、気楽に str = s; とすると、
実装の仕方によっては不具合が出る可能性がある気がするんだが、
仕様的にはこの辺どうなのか、知ってる人居る?

要は「stringの代入演算子の内部で元の文字列をdeleteするタイミング」
に規定があるのかどうか、って事だけど。

もちろん、char*ではなくiteratorを使っても同じだと思うけど、
・部分文字列を作って
・新規にstringのインスタンスを作り
・それを元のstrに代入する
の3段階の手順を踏むような、例えば
str = string(it, str.end());
みたいな形なら、間違いなく問題は無いはず。