Именованные требования C++: BasicFormatter (начиная с C++20)
BasicFormatter — это тип, который абстрагирует операции форматирования для заданного типа аргумента форматирования и типа символа. Специализации std::formatter должны соответствовать требованиям BasicFormatter.
BasicFormatter является 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 |
g | значение типа Formatter |
arg | lvalue типа Arg |
t | значение типа, преобразуемого в Arg (возможно, с квалификатором const) |
parse_ctx | lvalue типа ParseCtx, удовлетворяющее всем следующим условиям:
|
fmt_ctx | lvalue типа FmtCtx |
| Выражение | Возвращаемый тип | Семантика |
|---|---|---|
g.parse(parse_ctx) |
ParseCtx::iterator |
|
f.format(arg, fmt_ctx) |
FmtCtx::iterator |
|
- Это позволяет форматтерам выдавать содержательные сообщения об ошибках.
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.
| DR | Применён к | Опубликованное поведение | Правильное поведение |
|---|---|---|---|
| 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/BasicFormatter