C++ の名前付き要件: BasicFormatter (C++20 以降)
From cppreference.com
BasicFormatter は、指定された書式設定引数型と文字型に対する書式設定操作を抽象化する型です。std::formatter の特殊化は、BasicFormatter の要件を満たす必要があります。
BasicFormatter は、const 引数と非 const 引数の両方を書式設定できる場合、Formatter です。
[編集] 要件
ある型が BasicFormatter を満たすのは、それがセミレギュラーである場合です。つまり、以下の要件を満たします。
そして、以下の型と値が与えられた場合、以下の表に示す式は有効であり、示された意味を持ちます。
| 型 | 定義 |
CharT
|
文字型 |
Arg
|
書式設定引数型 |
フォーマッタ
|
型 Arg と CharT のための Formatter 型 |
OutputIt
|
LegacyOutputIterator 型 |
ParseCtx
|
std::basic_format_parse_context<CharT> |
FmtCtx
|
std::basic_format_context<OutputIt, CharT> |
| 値 | 定義 |
| f | 型 (おそらく const 修飾) Formatter の値 |
| g | 型 Formatter の値 |
| arg | 型 Arg の左辺値 |
| t | 型 (おそらく const 修飾) Arg に変換可能な値 |
| parse_ctx | 以下のすべての条件を満たす型 ParseCtx の左辺値
|
| fmt_ctx | 型 FmtCtx の左辺値 |
| Expression | 戻り値の型 | セマンティクス |
|---|---|---|
| g.parse(parse_ctx) | ParseCtx::iterator
|
|
| f.format(arg, fmt_ctx) | FmtCtx::iterator
|
|
- ↑ これにより、フォーマッタは意味のあるエラーメッセージを出力できます。
[編集] 欠陥報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 3892 | C++20 | format-spec が存在しない場合、pc.begin() の値が不明確でした。 | 明確化された |