C++11std::wstring_convert
非常*
适合标准的 UTF-8 <-> UTF-16/UCS2/UCS4 转换。但是,当我尝试使用不是 from 的构面来实例化 wstring_convert 或 wbuffer_convert 时<codecvt>
,它没有按预期工作:
// works as expected
std::wstring_convert<std::codecvt_utf8<wchar_t>> ucs4conv;
// Now, by analogy, I want to try this:
std::wstring_convert<std::codecvt<wchar_t, char, std::mbstate_t>> gbconv(
new std::codecvt_byname<wchar_t, char, std::mbstate_t>("zh_CN.gb18030"));
Clang++ 错误提示“在 ~wstring_convert 中调用 codecvt<> 的受保护析构函数”
Visual Studio 允许它(尽管它缺少该语言环境,但这是另一回事),因为它的 wstring_convert 将 facet 指针的生命周期管理典当到它作为成员持有的语言环境对象,并且语言环境知道如何删除指向所有方面的指针。
Visual Studio 是对的而 libc++ 是错的吗?
*
正如在 clang++-2.9/libc++-svn 和 Visual Studio 2010 EE SP1 中实现的那样,以下示例适用于两者,但不适用于 GCC,遗憾的是:https ://ideone.com/hywz6