Details
-
New Feature
-
Status: Open
-
Major
-
Resolution: Unresolved
-
4.1.2, 4.1.3, 4.1.4, 4.2.0, 4.2.1
-
None
-
all
-
Usability
Description
There is a pair of generic insertion and extraction operators for const char* (i.e., that make it possible to insert/extract narrow character strings to/from a stream object specialized on wchar_t or even user-defined character type), but there are no such operators for wchar_t (i.e., that would
make it possible to insert/extract arrays of wchar_t elements to/from narrow streams or streams specialized on a user-defined character type).
Such operators would provide a useful and convenient interface to the low-level codecvt facet, one that could be used to perform in memory
codeset conversion just as easily and conveniently as fstream performs such conversions on files. Here's an example of how the insertion
operator could be used to easily convert from UCS to UTF-8:
#include <cassert> // for assert()
#include <cwchar> // for mbstate_t
#include <locale> // for codecvt, locale
#include <sstream> // for ostringstream
int main ()
{
std::stringstream ostrm;
typedef std::codecvt_byname<wchar_t, char, std::mbstate_t> Unicode;
ostrm.imbue (std::locale (ostrm.getloc (), new Unicode ("UTF-8@UCS")));
// convert the UCS Greek letters alpha, beta, gamma to UTF-8
// expected UTF-8 encoding: "\xce\xb1\xce\xb2\xce\xb3"
ostrm << L"\x3b1\x3b2\x3b3";
assert ("\xce\xb1\xce\xb2\xce\xb3" == ostrm.str ());
}