C++ named requirements: BasicFormatter (since C++20)
From cppreference.net
BasicFormatter 是一种类型,用于抽象化特定格式化参数类型和字符类型的格式化操作。 std::formatter 的特化必须满足 BasicFormatter 的要求。
当 BasicFormatter 能够同时格式化常量与非常量参数时,它即满足 Formatter 的要求。
要求
一个类型满足 BasicFormatter 的条件是它必须满足半正则要求,这意味着:
并且,给定以下类型和值,下表中所示的表达式是有效的,并具有指定的语义:
| 类型 | 定义 |
CharT
|
字符类型 |
Arg
|
格式化参数类型 |
Formatter
|
用于类型
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
的左值
|
| 表达式 | 返回类型 | 语义 |
|---|---|---|
| g. parse ( parse_ctx ) |
ParseCtx::iterator
|
|
| f. format ( arg, fmt_ctx ) |
FmtCtx::iterator
|
|
- ↑ 这使得格式化程序能够输出有意义的错误信息。
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 应用于 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| LWG 3892 | C++20 | 当 格式说明符 不存在时, pc. begin ( ) 的值不明确 | 已明确说明 |