std::codecvt with オレオレ state_type

http://d.hatena.ne.jp/Cryolite/20051103#p1 に関して.自分がやりたいことは独自に定義したクラスを state_type としてコード変換することなので,std::codecvt から継承するんじゃなくて直接 std::codecvt の特殊化版を作れば良い事に気が付いた.std 名前空間で定義されているクラステンプレートに対して,ユーザ定義クラスに対する(部分)特殊化版を(規格で要求されている事項を満たす範囲で)定義するのは許されているので.っていうか,std::codecvt は std::codecvt と std::codecvt の2つだけがインスタンス化されていることが保証されているので,そもそも自分で定義した state_type に対する std::codecvt がインスタンス化されない可能性があるし.っていうか実際 mingwcygwin では各関数の定義がなくてリンカエラーになるし.
なので http://d.hatena.ne.jp/Cryolite/20051103#p1 の問題は,自分で非 const シグネチャな length, do_length を定義すれば OK と.
ぐわ,一方で別の問題が.
規格では std::codecvt は

template<class, class, class>
class std::codecvt
  : public std::locale::facet
  , public std::codecvt_base
{
  ...
};

な定義になってないといけないのに,VC++7.1 は

template<class, class, class>
class std::codecvt
  : public std::codecvt_base
{
  ...
}

な定義になってやがる.で,std::codecvt_base が std::locale::facet を継承している.なので,他の標準ライブラリの実装と共通なコードを書くために,基底クラスの初期化子の指定などを切り分けないといけない.まぁ,簡単だったけれど.