109 lines
5.2 KiB
Markdown
109 lines
5.2 KiB
Markdown
[formatter.requirements]
|
||
|
||
# 28 Text processing library [[text]](./#text)
|
||
|
||
## 28.5 Formatting [[format]](format#formatter.requirements)
|
||
|
||
### 28.5.6 Formatter [[format.formatter]](format.formatter#formatter.requirements)
|
||
|
||
#### 28.5.6.1 Formatter requirements [formatter.requirements]
|
||
|
||
[1](#1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L6981)
|
||
|
||
A type F meets the *BasicFormatter* requirements if
|
||
it meets the
|
||
|
||
- [(1.1)](#1.1)
|
||
|
||
*Cpp17DefaultConstructible* (Table [30](utility.arg.requirements#tab:cpp17.defaultconstructible "Table 30: Cpp17DefaultConstructible requirements")),
|
||
|
||
- [(1.2)](#1.2)
|
||
|
||
*Cpp17CopyConstructible* (Table [32](utility.arg.requirements#tab:cpp17.copyconstructible "Table 32: Cpp17CopyConstructible requirements (in addition to Cpp17MoveConstructible)")),
|
||
|
||
- [(1.3)](#1.3)
|
||
|
||
*Cpp17CopyAssignable* (Table [34](utility.arg.requirements#tab:cpp17.copyassignable "Table 34: Cpp17CopyAssignable requirements (in addition to Cpp17MoveAssignable)")),
|
||
|
||
- [(1.4)](#1.4)
|
||
|
||
*Cpp17Swappable* ([[swappable.requirements]](swappable.requirements "16.4.4.3 Swappable requirements")), and
|
||
|
||
- [(1.5)](#1.5)
|
||
|
||
*Cpp17Destructible* (Table [35](utility.arg.requirements#tab:cpp17.destructible "Table 35: Cpp17Destructible requirements"))
|
||
|
||
requirements, and
|
||
the expressions shown in Table [112](#tab:formatter.basic "Table 112: BasicFormatter requirements") are valid and
|
||
have the indicated semantics[.](#1.sentence-1)
|
||
|
||
[2](#2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L6995)
|
||
|
||
A type F meets the *Formatter* requirements
|
||
if it meets the *BasicFormatter* requirements and
|
||
the expressions shown in Table [113](#tab:formatter "Table 113: Formatter requirements") are valid and
|
||
have the indicated semantics[.](#2.sentence-1)
|
||
|
||
[3](#3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L7001)
|
||
|
||
Given character type charT, output iterator typeOut, and formatting argument type T,
|
||
in Table [112](#tab:formatter.basic "Table 112: BasicFormatter requirements") and Table [113](#tab:formatter "Table 113: Formatter requirements"):
|
||
|
||
- [(3.1)](#3.1)
|
||
|
||
f is a value of type (possibly const) F,
|
||
|
||
- [(3.2)](#3.2)
|
||
|
||
g is an lvalue of type F,
|
||
|
||
- [(3.3)](#3.3)
|
||
|
||
u is an lvalue of type T,
|
||
|
||
- [(3.4)](#3.4)
|
||
|
||
t is a value of a type convertible to (possibly const) T,
|
||
|
||
- [(3.5)](#3.5)
|
||
|
||
PC is basic_format_parse_context<charT>,
|
||
|
||
- [(3.6)](#3.6)
|
||
|
||
FC is basic_format_context<Out, charT>,
|
||
|
||
- [(3.7)](#3.7)
|
||
|
||
pc is an lvalue of type PC, and
|
||
|
||
- [(3.8)](#3.8)
|
||
|
||
fc is an lvalue of type FC[.](#3.sentence-1)
|
||
|
||
pc.begin() points to the beginning of the*format-spec* ([[format.string]](format.string "28.5.2 Format string"))
|
||
of the replacement field being formatted
|
||
in the format string[.](#3.sentence-2)
|
||
|
||
If *format-spec* is not present or empty then eitherpc.begin() == pc.end() or*pc.begin() == '}'[.](#3.sentence-3)
|
||
|
||
Table [112](#tab:formatter.basic) — *BasicFormatter* requirements [[tab:formatter.basic]](./tab:formatter.basic)
|
||
|
||
| [ð](#tab:formatter.basic-row-1)<br>**Expression** | **Return type** | **Requirement** |
|
||
| --- | --- | --- |
|
||
| [ð](#tab:formatter.basic-row-2)<br>g.parse(pc) | PC::iterator | Parses *format-spec* ([[format.string]](format.string "28.5.2 Format string")) for type T in the range [pc.begin(), pc.end()) until the first unmatched character[.](#tab:formatter.basic-row-2-column-3-sentence-1)<br>Throws format_error unless the whole range is parsed or the unmatched character is }[.](#tab:formatter.basic-row-2-column-3-sentence-2)<br>[*Note [1](#tab:formatter.basic-row-2-column-3-note-1)*:<br>This allows formatters to emit meaningful error messages[.](#tab:formatter.basic-row-2-column-3-sentence-3) â *end note*]<br> Stores the parsed format specifiers in *this and returns an iterator past the end of the parsed range[.](#tab:formatter.basic-row-2-column-3-sentence-4) |
|
||
| [ð](#tab:formatter.basic-row-3)<br>f.format(u, fc) | FC::iterator | Formats u according to the specifiers stored in *this, writes the output to fc.out(), and returns an iterator past the end of the output range[.](#tab:formatter.basic-row-3-column-3-sentence-1)<br>The output shall only depend on u, fc.locale(), fc.arg(n) for any value n of type size_t, and the range [pc.begin(), pc.end()) from the last call to f.parse(pc)[.](#tab:formatter.basic-row-3-column-3-sentence-2) |
|
||
|
||
Table [113](#tab:formatter) — *Formatter* requirements [[tab:formatter]](./tab:formatter)
|
||
|
||
| [ð](#tab:formatter-row-1)<br>**Expression** | **Return type** | **Requirement** |
|
||
| --- | --- | --- |
|
||
| [ð](#tab:formatter-row-2)<br>f.format(t, fc) | FC::iterator | Formats t according to the specifiers stored in *this, writes the output to fc.out(), and returns an iterator past the end of the output range[.](#tab:formatter-row-2-column-3-sentence-1)<br>The output shall only depend on t, fc.locale(), fc.arg(n) for any value n of type size_t, and the range [pc.begin(), pc.end()) from the last call to f.parse(pc)[.](#tab:formatter-row-2-column-3-sentence-2) |
|
||
| [ð](#tab:formatter-row-3)<br>f.format(u, fc) | FC::iterator | As above, but does not modify u[.](#tab:formatter-row-3-column-3-sentence-1) |
|