Именованные требования C++: Formatter (начиная с C++20)
Formatter — это тип, абстрагирующий операции форматирования для заданного типа аргумента форматирования и символьного типа. Специализации std::formatter, предоставляемые стандартной библиотекой, должны удовлетворять требованиям Formatter, если не указано иное.
Formatter может форматировать как константные, так и неконстантные аргументы, обычно предоставляя функцию-член format, принимающую константную ссылку.
Требования
Тип удовлетворяет требованиям Formatter, если он удовлетворяет требованиям BasicFormatter и для следующих типов и значений выражения, приведённые в таблице ниже, являются корректными и имеют указанный смысл:
| Тип | Определение |
|---|---|
CharT | символьный тип |
Arg | тип аргумента форматирования |
Formatter | тип Formatter для типов Arg и CharT |
OutputIt | тип LegacyOutputIterator |
ParseCtx | std::basic_format_parse_context<CharT> |
FmtCtx | std::basic_format_context<OutputIt,CharT> |
| Значение | Определение |
f | значение типа (возможно, с квалификатором const) Formatter |
arg | lvalue типа Arg |
t | значение типа, преобразуемого в (возможно, с квалификатором const) Arg |
parse_ctx | lvalue типа ParseCtx, удовлетворяющее всем следующим условиям:
|
fmt_ctx | lvalue типа FmtCtx |
| Выражение | Тип возвращаемого значения | Семантика |
|---|---|---|
f.format(t, fmt_ctx) |
FmtCtx::iterator |
|
f.format(arg, fmt_ctx) |
FmtCtx::iterator | Как выше, но не изменяет arg. |
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.
| Отчёт об ошибке | Применён к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 3892 | C++20 | значение pc.begin() было неясно, если format-spec отсутствует | уточнено |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/Formatter