http://d.hatena.ne.jp/Cryolite/20051103#p1 に関して.自分がやりたいことは独自に定義したクラスを state_type としてコード変換することなので,std::codecvt から継承するんじゃなくて直接 std::codecvt の特殊化版を作れば良い事に気が付いた.std 名前空間で定義されているクラステンプレートに対して,ユーザ定義クラスに対する(部分)特殊化版を(規格で要求されている事項を満たす範囲で)定義するのは許されているので.っていうか,std::codecvt は std::codecvt
なので 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 を継承している.なので,他の標準ライブラリの実装と共通なコードを書くために,基底クラスの初期化子の指定などを切り分けないといけない.まぁ,簡単だったけれど.