为了给出我正在谈论的内容,以下程序true
在使用 clang++/libc++ 编译时正确打印
#include <iostream>
#include <regex>
int main()
{
std::locale::global(std::locale("en_US.UTF-8"));
std::wstring str = L"AÀÁÂÃÄÅaàáâãäå";
std::wregex re(L"[[=a=]]*", std::regex::basic);
std::cout << std::boolalpha << std::regex_match(str, re) << '\n';
}
但是,我不太明白std::regex_traits::transform_primary()
标准中的描述(通过它[=a=]
来处理)。引用 28.7[re.traits]/7:
如果
typeid(use_facet<collate<charT> >) == typeid(collate_byname<charT>)
返回的排序键的形式collate_byname<charT>::transform(first, last)
已知并且可以转换为主排序键,则返回该键,否则返回空字符串。
最初的提案解释说,该标准regex_traits::transform_primary()
只有collate
在用户没有替换灌输语言环境中的方面时才有效(这是它知道如何将结果转换为collate::transform()
等价键的唯一方法)。
我的问题是,typeid
标准中的比较应该如何确保这一点?这是否意味着系统提供的所有方面都从use_facet
具有_byname
真正动态类型的语言环境中提取出来?