Namespaces
Variants

C++ named requirements: BasicFormatter (since C++20)

From cppreference.net
C++ named requirements

BasicFormatter は、与えられたフォーマット引数型と文字型に対するフォーマット操作を抽象化する型です。 std::formatter の特殊化は、 BasicFormatter の要件を満たす必要があります。

BasicFormatter は、constおよび非constの両方の引数をフォーマットできる場合、 Formatter 要件を満たします。

要件

型は、それが準正則(semi-regular)である場合、すなわち以下を満たす場合に BasicFormatter を満たします:

また、以下の型と値が与えられた場合、下記の表に示す式は有効であり、示された意味を持ちます:

定義
CharT 文字型
Arg フォーマット引数型
Formatter Arg および CharT に対する Formatter
OutputIt LegacyOutputIterator
ParseCtx std:: basic_format_parse_context < CharT >
FmtCtx std:: basic_format_context < OutputIt, CharT >
定義
f Formatter (const修飾されている可能性あり)の値
g Formatter の値
arg Arg の左辺値
t Arg (const修飾されている可能性あり)に変換可能な値
parse_ctx ParseCtx の左辺値で、以下の条件をすべて満たすもの:
  • parse_ctx. begin ( ) フォーマット文字列 内でフォーマットされている置換フィールドの format-spec の先頭を指す
  • format-spec が存在しないか空の場合、 parse_ctx. begin ( ) == parse_ctx. end ( ) または * parse_ctx. begin ( ) == '}' のいずれかが成り立つ
fmt_ctx FmtCtx の左辺値
戻り値型 セマンティクス
g. parse ( parse_ctx ) ParseCtx::iterator
  • 範囲 [ parse_ctx. begin ( ) , parse_ctx. end ( ) ) 内で、型 Arg format-spec を最初のマッチしない文字まで解析する。
  • 範囲全体が解析されるか、マッチしない文字が } でない限り std::format_error をスローする。 [注 1]
  • 解析されたフォーマット指定子を g に格納し、解析範囲の終端イテレータを返す。
f. format ( arg, fmt_ctx ) FmtCtx::iterator
  • f に格納された指定子に従って arg をフォーマットし、出力を fmt_ctx. out ( ) に書き込み、出力範囲の終端イテレータを返す。
  • 出力は以下のみに依存する:
    • arg ,
    • fmt_ctx. locale ( ) ,
    • 最後に呼び出された f. parse ( parse_ctx ) からの範囲 [ parse_ctx. begin ( ) , parse_ctx. end ( ) ) , および
    • std::size_t の任意の値 n に対する fmt_ctx. arg ( n )
  1. これにより、フォーマッタは意味のあるエラーメッセージを出力できます。

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 3892 C++20 format-spec が存在しない場合の pc. begin ( ) の値が不明確であった 明確化された