@@ -44,28 +44,14 @@ namespace std {
4444
4545(1)は、`charT`を`char`または`wchar_t`とすると、標準で以下の特殊化が利用できる。
4646
47- - 1 以下のもの。
48- ```cpp
49- template<> struct formatter<charT, charT>;
50-
51- template<> struct formatter<char, wchar_t>;
52-
53- template<> struct formatter<charT*, charT>;
54-
55- template<> struct formatter<const charT*, charT>;
56-
57- template<size_t N> struct formatter<const charT[N], charT>;
58-
59- template<class traits, class Allocator>
60- struct formatter<basic_string<charT, traits, Allocator>, charT>;
61-
62- template<class traits>
63- struct formatter<basic_string_view<charT, traits>, charT>;
64- ```
65- * basic_string[link /reference/string/basic_string.md]
66- * basic_string_view[link /reference/string_view/basic_string_view.md]
67-
68- - 2 第1テンプレート引数が`nullptr_t`, `void*`, `const void*`, `bool`, すべてのCV修飾されない標準の整数型, 拡張整数型, 浮動小数点数型であり、第2テンプレート引数が`charT`であるもの。
47+ - `template<> struct formatter<charT, charT>`
48+ - `template<> struct formatter<char, wchar_t>`
49+ - `template<> struct formatter<charT*, charT>`
50+ - `template<> struct formatter<const charT*, charT>`
51+ - `template<size_t N> struct formatter<const charT[N], charT>`
52+ - `template<class traits, class Allocator> struct formatter<`[`basic_string`](/reference/string/basic_string.md)`<charT, traits, Allocator>, charT>`
53+ - `template<class traits> struct formatter<`[`basic_string_view`](/reference/string_view/basic_string_view.md)`<charT, traits>, charT>`
54+ - 第1テンプレート引数が`nullptr_t`, `void*`, `const void*`, `bool`, すべてのCV修飾されない標準の整数型, 拡張整数型, 浮動小数点数型であり、第2テンプレート引数が`charT`であるもの。
6955
7056さらに、ユーザーが`formatter`を特殊化した場合、それも有効である。
7157
@@ -96,7 +82,7 @@ namespace std {
9682 - 出力は`u`、`fc.locale()`、最後に呼び出された`f.parse(pc)`のイテレータ範囲`[pc.begin(), pc.end())`以外に依存しない
9783 - `u`を変更しない
9884
99- 条件内の各要素を、以下のように定義する
85+ 条件内の各要素を、以下のように定義する。
10086
10187- 文字の型を`charT`
10288- 出力イテレータの型を`Out`
@@ -109,11 +95,28 @@ namespace std {
10995- `FC`を[`basic_format_context`](basic_format_context.md)`<Out, charT>`
11096- `pc`を`PC`のlvalue
11197- `fc`を`FC`のlvalue
112- - `pc.begin()`は書式文字列中の対応する置換フィールドのオプションの先頭を指す
98+
99+ ただし、[`parse`](formatter/parse.md)の呼び出し前の状態で、`pc.begin()`は書式文字列中の対応する置換フィールドのオプションの先頭を指す。
100+
101+ - オプションが空でなければ、`*pc.begin()`は`:`の次の文字
113102- オプションが空なら、`pc.begin() == pc.end()`または`*pc.begin() == '}'`である
114103
115104[`std::formattable`](/reference/format/formattable.md)コンセプトも参照。
116105
106+ フォーマッターは、書式文字列中に置換フィールドが見つかるたびに次のコードと近い形で呼び出される。
107+
108+ ```cpp
109+ typename FC::template formatter_type<T> f;
110+ pc.advance_to(f.parse(pc)); // オプションを解析し状態を保存する
111+ fc.advance_to(f.format(u, fc)); // 状態をもとにフォーマットを行う
112+ assert(pc.begin() == pc.end() || *pc.begin() == '}');
113+ ```
114+ * pc.advance_to[ link /reference/format/basic_format_parse_context/advance_to.md]
115+ * fc.advance_to[ link /reference/format/basic_format_context/advance_to.md]
116+ * f.parse[ link formatter/parse.md]
117+ * f.format[ link formatter/format.md]
118+
119+ [ handle](/reference/format/basic_format_arg/handle.md)も参照。
117120
118121## メンバ関数
119122
0 commit comments