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() );
}
- 在 Visual Studio 2019 年工作正常(打印“abc”)
- 在 gcc 11
中抛出 std::bad_cast
- 在 clang 中编译失败
这里的预期结果是什么?
基于 UTF 的字符串不适用于像几乎所有 Boost.Algorithm's text conversion stuff 一样的区域感知结构。即使它们确实有效,它们也无法执行基于 Unicode 的大小写转换。
您需要一个既支持 Unicode 又了解 char8_t
的库。
这个 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() );
}
- 在 Visual Studio 2019 年工作正常(打印“abc”)
- 在 gcc 11 中抛出 std::bad_cast
- 在 clang 中编译失败
这里的预期结果是什么?
基于 UTF 的字符串不适用于像几乎所有 Boost.Algorithm's text conversion stuff 一样的区域感知结构。即使它们确实有效,它们也无法执行基于 Unicode 的大小写转换。
您需要一个既支持 Unicode 又了解 char8_t
的库。