template <class ForwardIterator>
string_type transform_primary(ForwardIterator first, ForwardIterator last) const;
概要
与えられた文字範囲[first, last)を、並べ替えのキーとして使用する、大文字・小文字を区別しない文字のシーケンスに変換する。結果のシーケンスは、ロケールごとの照合順序となる。
効果
getloc()で得られるロケールにおける文字照合ファセット collate<char_type> の型が collate_byname<char_type> であり、かつcollate_byname<char_type>::transform(first, last)が返すソートキーの形式が既知であってプライマリソートキーに変換できる場合、そのキーを返す。そうでなければ空文字列を返す。
例
#include <regex>
#include <cassert>
#include <string>
int main()
{
std::regex_traits<char> traits;
const std::string a = "A";
const std::string a_acute = "Á";
{
const std::string key_a = traits.transform_primary(a.begin(), a.end());
const std::string key_a_acute = traits.transform_primary(a_acute.begin(), a_acute.end());
assert(key_a != key_a_acute);
}
{
// Latin2
traits.imbue(std::locale("cs_CZ.ISO8859-2"));
const std::string key_a = traits.transform_primary(a.begin(), a.end());
const std::string key_a_acute = traits.transform_primary(a_acute.begin(), a_acute.end());
assert(key_a == key_a_acute);
}
}
出力
バージョン
言語
- C++11
処理系
- Clang: 3.0 ✅, 3.1 ✅, 3.2 ✅, 3.3 ✅, 3.4 ✅, 3.5 ✅, 3.6 ✅
- GCC: 4.9.0 ✅, 4.9.1 ✅, 4.9.2 ✅, 5.0.0 ✅
- ICC: ??
- Visual C++: ??
参照
- LWG Issue 4186.
regex_traits::transform_primarymistakenly detectstypeidof a function- C++26で、文字照合ファセットの判定が、関数の
typeidを誤って検出しないよう、ロケールのcollateファセットの型がcollate_byname<char_type>であるかどうかを判定する形に明確化された
- C++26で、文字照合ファセットの判定が、関数の