C++20:boost::algorithm::to_lower(std::u8string)

C++20: boost::algorithm::to_lower( std::u8string )

这个 C++20 程序

#include <iostream>
#include <string>
#include <boost/algorithm/string/case_conv.hpp>

int main()
{
    std::u8string s8 = u8"ABC";
    boost::algorithm::to_lower( s8 );
    std::cout << std::string( s8.begin(), s8.end() );
}
  1. 在 Visual Studio 2019 年工作正常(打印“abc”)
  2. 在 gcc 11
  3. 中抛出 std::bad_cast
  4. 在 clang 中编译失败

这里的预期结果是什么?

基于 UTF 的字符串不适用于像几乎所有 Boost.Algorithm's text conversion stuff 一样的区域感知结构。即使它们确实有效,它们也无法执行基于 Unicode 的大小写转换。

您需要一个既支持 Unicode 又了解 char8_t 的库。