Namespaces
Variants

C++ named requirements: BasicFormatter (since C++20)

From cppreference.net
C++ named requirements

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 значение типа, преобразуемого в (возможно const-квалифицированный) Arg
parse_ctx lvalue типа ParseCtx , удовлетворяющее всем следующим условиям:
  • parse_ctx. begin ( ) указывает на начало спецификации формата форматируемого поля замены в строке формата .
  • Если спецификация формата отсутствует или пуста, то либо parse_ctx. begin ( ) == parse_ctx. end ( ) , либо * parse_ctx. begin ( ) == '}' .
fmt_ctx lvalue типа FmtCtx
Выражение Тип возвращаемого значения Семантика
g. parse ( parse_ctx ) ParseCtx::iterator
  • В диапазоне [ parse_ctx. begin ( ) , parse_ctx. end ( ) ) , парсит format-spec для типа Arg до первого несовпадающего символа.
  • Выбрасывает std::format_error , если не весь диапазон был распарсен или несовпадающий символ не является } . [примечание 1]
  • Сохраняет распарсенные спецификаторы формата в g и возвращает конечный итератор распарсенного диапазона.
f. format ( arg, fmt_ctx ) FmtCtx::iterator
  • Форматирует arg согласно спецификаторам, сохраненным в f , записывает вывод в fmt_ctx. out ( ) и возвращает конечный итератор выходного диапазона.
  • Вывод должен зависеть только от:
    • arg ,
    • fmt_ctx. locale ( ) ,
    • диапазона [ parse_ctx. begin ( ) , parse_ctx. end ( ) ) из последнего вызова f. parse ( parse_ctx ) , и
    • fmt_ctx. arg ( n ) для любого значения n типа std::size_t .
  1. Это позволяет форматтерам выводить информативные сообщения об ошибках.

Отчеты о дефектах

Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 3892 C++20 значение pc. begin ( ) было неясным, если format-spec отсутствует прояснено