basic_ostream の tellp の説明を読むと、以下のように書いてある。

> basic_iosのメンバ関数 fail()がtrueを返すと、tellp() は、
> pos_type(off_type(-1))を返して失敗を伝えます。
> それ以外の場合は、rdbuf()-> pubseekoff(0,cur, out)を呼び出して、
> 出力シーケンスのカレントの位置を返します。

よって tellp の実装は、streambuf の実装に依存する。
basic_stringbuf の seekoff の実装は、

> オープンモードがin | outの場合、
> 入力、出力両方のシーケンスのストリーム ポジションを変更します。
> オープン モードがinのときは、入力シーケンスのストリーム ポジションのみ変更し、
> outのときは出力シーケンスのストリーム ポジションのみ変更します。
> 新しいポジションは、off(ずれ)とway(参照ポイント)の2つのパラメタを組み合わせて計算します。
> 位置変更前にシーケンスのカレントの位置が無効の場合、
> オペレーションは失敗し、pos_type(off_type(-1))が返り値になります。
> それ以外の場合は、カレントの新しい位置を返します。

とあるから、>>368 は STLport 側の問題のような気もする。