提问人:Argus Kos 提问时间:8/24/2023 最后编辑:wohlstadArgus Kos 更新时间:8/24/2023 访问量:57
为什么 std::locale 不适用于 std::u32string?
Why std::locale doesn't work with std::u32string?
问:
所以我正在尝试与自定义语言环境一起使用。
它适用于 ,但与我一起收到:std::tolower
wstring
u32string
什么():std::bad_cast
这就是我所做的
auto loc = std::locale("el_GR.UTF-8");
wstring wtest{L"πρόβλημα"};
u32string utest{U"πρόβλημα"};
auto toLower = [&](auto c) { return std::toupper(c, loc); };
std::transform(wtest.begin(), wtest.end(), wtest.begin(), toLower); //ok
std::transform(utest.begin(), utest.end(), utest.begin(), toLower); //bad_cast
答:
2赞
user17732522
8/24/2023
#1
语言环境需要仅支持 和 的方面,即 和。任何进一步的专业化都是可选的。std::ctype
char
wchar_t
std::string
std::wstring
您正在使用的实现似乎没有为 提供这样的专业化,即 。char32_t
std::u32string
评论
0赞
Argus Kos
8/24/2023
至于今天,别无选择,对吧?
评论
std::tolower
的可能实现来看,它可能使用std::ctype
,唯一的专用化保证是 /...char
wchar_t