为什么 std::locale 不能与 std::u32string 一起使用?

问题描述 投票:0回答:1

所以我尝试将

std::tolower
与自定义区域设置一起使用。 它适用于
wstring
,但使用
u32string
我收到:

what(): 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
c++ locale stdstring
1个回答
0
投票

区域设置仅需要支持

std::ctype
char
wchar_t
方面,即
std::string
std::wstring
。任何进一步的专业都是可选的。

您正在使用的实现似乎没有提供这样的专业化

char32_t

© www.soinside.com 2019 - 2024. All rights reserved.