私が話していることの文脈を示すために、次のプログラムは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