C++ 名前付き要件: Formatter (C++20 以降)
From cppreference.com
Formatter は、指定されたフォーマット引数型と文字型に対するフォーマット操作を抽象化する型です。標準ライブラリによって提供される std::formatter の特殊化は、特に断りがない限り、Formatter の要件を満たす必要があります。
const および非 const 引数の両方をフォーマットできる Formatter は、通常、const 参照を受け取る format メンバ関数を提供することによって実現されます。
[編集] 要件
型が Formatter を満たすとは、BasicFormatter を満たし、以下の型と値が与えられた場合に、以下の表に示す式が有効であり、示された意味を持つことです。
| 型 | 定義 |
CharT
|
文字型 |
Arg
|
フォーマット引数型 |
フォーマッタ
|
Arg 型と CharT 型の Formatter 型 |
OutputIt
|
LegacyOutputIterator 型 |
ParseCtx
|
std::basic_format_parse_context<CharT> |
FmtCtx
|
std::basic_format_context<OutputIt, CharT> |
| 値 | 定義 |
| f | Formatter 型の値(possibly const-qualified) |
| arg | Arg 型の左辺値 |
| t | Arg 型に変換可能な値(possibly const-qualified) |
| parse_ctx | 以下のすべての条件を満たす ParseCtx 型の左辺値
|
| fmt_ctx | FmtCtx 型の左辺値 |
| Expression | 戻り値の型 | セマンティクス |
|---|---|---|
| f.format(t, fmt_ctx) | FmtCtx::iterator
|
|
| f.format(arg, fmt_ctx) | FmtCtx::iterator
|
上記と同様ですが、arg を変更しません。 |
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 3892 | C++20 | format-spec が存在しない場合、pc.begin() の値が不明瞭でした。 | 明確化された |