うはーゆめがひろがりんぐ

Boost.Iostreams で遊んでみた結果,最終的に以下のようなコードに行き着く.
( cry::iostreams::newline_filter は boost::iostreams::newline_filter が Peekable を要求していてあんまり使い物にならないのを改良したもの. cry::iostreams::u_converter は ICU のコード変換系ライブラリを Boost.Iostreams のフレームワークに載るようにラップしたもの.そのうちヒマができたらコードさらします.)

namespace io = boost::iostreams;

io::copy(
    cry::iostreams::make_u_converter(
        io::compose(
            cry::iostreams::newline_filter( "cry::iostreams::newline::posix" )
          , io::file_source( "inputfile", std::ios_base::binary ) )
      , "Shift_JIS" )
  , io::tee(
        cry::iostreams::make_u_converter( io::back_inserter( u ), "UTF-8" )
      , cry::iostreams::make_u_converter(
            io::compose(
                cry::iostreams::newline_filter( "cry::iostreams::newline::dos" )
              , io::file_sink( "outputfile", std::ios_base::binary ) )
          , "EUC-JP" ) ) );

ちなみに上記の読み方は
「"inputfile" というファイルから始まる UNIX 形式の改行コード (LF) 変換 + Shift_JIS -> UTF-16 のコード変換をかました入力ストリームを, UTF-16 -> UTF-8 のコード変換をかました出力ストリームとして u へ push_back しつつ,同時に UTF-16 -> EUC-JP のコード変換 + DOS 形式の改行コード (CRLF) 変換をかました出力ストリームとして "outputfile" というファイルへ吐き出す.」です.もちろん全行程ストリーム扱い.
どう見ても変態です.
本当にありがとうございました.