C++ 具名要求:基本格式化器 (BasicFormatter) (C++20 起)
来自cppreference.com
基本格式化器 (BasicFormatter) 是对给定的格式化参数类型及字符类型抽象格式化操作的类型。要求 std::formatter 的特化满足基本格式化器 (BasicFormatter) 。
能格式化 const 与非 const 的实参的基本格式化器 (BasicFormatter) 是格式化器 (Formatter) 。
要求
一个类型为半正则,则满足 基本格式化器 (BasicFormatter) ,这表示它满足:
- 可默认构造 (DefaultConstructible)
- 可复制构造 (CopyConstructible)
- 可复制赋值 (CopyAssignable)
- 可析构 (Destructible)
- 可交换 (Swappable)
并且给定以下类型和值,下方表格列出的表达式必须合法且具有指定的语义:
类型 | 定义 |
CharT
|
字符类型 |
Arg
|
格式化实参类型 |
Formatter
|
对于类型 Arg 和 CharT 的基本格式化器 (BasicFormatter) 类型
|
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() 的值不明确 | 使之明确 |