C++03 defines two character types: char and wchar_t. (lets ignore the signed char and unsigned char insanity).
These two character are then applied to std::basic_string, std::basic_ostream, etc as std::string/std::wstring and std::ostream/std::wostream.
From the streams the standard library also defines the globals std::cout and std::wcout.
The new c++0x standard defines two more character types char16_t and char32_t. However, the only new typedefs are std::u16string and std::u32string.
Why doesn’t the standard supply a std::u16ostream? Or how about a std::u32cout?
It was decided that implementing Unicode iostreams was too much work to be worth it:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2238.html
From the paper:
From what I understand, the standard committee realized that serialization to wide character (2- or 4-byte formats) is uncommon, and where you’d need UTF-16 or UTF-32 you could always implement it yourself using the same old char-based byte streams, but with a codecvt facet to would convert your input to UTF-16/UTF-32, which it could treat as yet-another-multibyte-format.