为什么 std::locale 不适用于 std::u32string?

Why std::locale doesn't work with std::u32string?

提问人:Argus Kos 提问时间:8/24/2023 最后编辑:wohlstadArgus Kos 更新时间:8/24/2023 访问量:57

问:

所以我正在尝试与自定义语言环境一起使用。 它适用于 ,但与我一起收到:std::tolowerwstringu32string

什么():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++ 语言环境 stdstring

评论

0赞 Jarod42 8/24/2023
std::tolower 的可能实现来看,它可能使用 std::ctype,唯一的专用化保证是 /...charwchar_t

答:

2赞 user17732522 8/24/2023 #1

语言环境需要仅支持 和 的方面,即 和。任何进一步的专业化都是可选的。std::ctypecharwchar_tstd::stringstd::wstring

您正在使用的实现似乎没有为 提供这样的专业化,即 。char32_tstd::u32string

评论

0赞 Argus Kos 8/24/2023
至于今天,别无选择,对吧?