高木です。おはようございます。 前回はUTF-8からUTF-32への変換でした。 今回はそれを利用してUTF-8からUTF-16に変換するためのmbrtoct関数を多重定義することにしましょう。 UTF-16にはchar16_t型を使用します。 以前からの方針として、char16_t型はUTF-16を扱うものと仮定しています。 さらに、wchar_t型にも対応することにしましょう。 wchar_t型の内部表現はUTF-16またはUTF-32のいずれかであることを仮定しています。 それではさっそくコードを書いていきましょう。 namespace cloverfield { inline std::size_t mbrtoct(char16_t* pc16, char const* s, std::size_t n, mbstate_t* ps) { char32_t c32; char16_