user841550 user841550 - 3 months ago 103
C++ Question

Is codecvt not a std header?

This code compiles with Visual C++ 11 and runs as expected on Windows 7 but fails to compile using either MinGW 4.7.0 on Windows 7 or gcc 4.8.0 on Linux. Compiling with

-std=c++11
flag

#include <codecvt>
#include <string>

// convert UTF-8 string to wstring
std::wstring utf8_to_wstring (const std::string& str)
{
std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv;
return myconv.from_bytes(str);
}

// convert wstring to UTF-8 string
std::string wstring_to_utf8 (const std::wstring& str)
{
std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv;
return myconv.to_bytes(str);
}


Error:


codecvt: No such file or directory.

Answer

The reason why GCC rejects this code is simple: libstdc++ doesn't support <codecvt> yet.

The C++11 support status page confirms this:

22.5 Standard code conversion facets N

Comments