Namespaces
Variants

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

From cppreference.net
C++ named requirements

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

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

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

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