Windows で UTF-16 のサロゲートペアの扱いが面倒だなと
思ったので、UTF-8 とかを API で UTF-16 に変換後に
私が勝手に定義した 4 バイト固定版 UTF-16 にさらに変換して
std::basic_string に突っ込んでます。サロゲートペア以外を 0 付加して
4 バイト化するという、Shift JIS を 2 バイト固定化して使う方法と
同じような感覚です。通常の UTF-16 への逆変換なども当然必要です。