Namespaces
Variants

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

From cppreference.net
C++ named requirements

BasicFormatter es un tipo que abstrae las operaciones de formato para un tipo de argumento de formato y tipo de carácter dados. Las especializaciones de std::formatter deben cumplir con los requisitos de BasicFormatter .

Un BasicFormatter es un Formatter si es capaz de formatear tanto argumentos const como no const.

Requisitos

Un tipo satisface BasicFormatter si es semirregular, lo que significa que satisface:

Y, dados los siguientes tipos y valores, las expresiones mostradas en la tabla a continuación son válidas y tienen la semántica indicada:

Tipo Definición
CharT un tipo de carácter
Arg un tipo de argumento de formato
Formatter un tipo Formatter para los tipos Arg y CharT
OutputIt un tipo LegacyOutputIterator
ParseCtx std:: basic_format_parse_context < CharT >
FmtCtx std:: basic_format_context < OutputIt, CharT >
Valor Definición
f un valor de tipo (posiblemente calificado con const) Formatter
g un valor de tipo Formatter
arg un lvalue de tipo Arg
t un valor de tipo convertible a (posiblemente calificado con const) Arg
parse_ctx un lvalue de tipo ParseCtx que satisface todas las siguientes condiciones:
  • parse_ctx. begin ( ) apunta al inicio del format-spec del campo de reemplazo que se está formateando en la cadena de formato .
  • Si format-spec no está presente o está vacío, entonces o bien parse_ctx. begin ( ) == parse_ctx. end ( ) o * parse_ctx. begin ( ) == '}' .
fmt_ctx un lvalue de tipo FmtCtx
Expresión Tipo de retorno Semántica
g. parse ( parse_ctx ) ParseCtx::iterator
  • En el rango [ parse_ctx. begin ( ) , parse_ctx. end ( ) ) , analiza el format-spec para el tipo Arg hasta el primer carácter no coincidente.
  • Lanza std::format_error a menos que todo el rango sea analizado o el carácter no coincidente sea } . [nota 1]
  • Almacena los especificadores de formato analizados en g y retorna un iterador final del rango analizado.
f. format ( arg, fmt_ctx ) FmtCtx::iterator
  • Formatea arg de acuerdo con los especificadores almacenados en f , escribe la salida a fmt_ctx. out ( ) y retorna un iterador final del rango de salida.
  • La salida solo debe depender de
    • arg ,
    • fmt_ctx. locale ( ) ,
    • el rango [ parse_ctx. begin ( ) , parse_ctx. end ( ) ) de la última llamada a f. parse ( parse_ctx ) , y
    • fmt_ctx. arg ( n ) para cualquier valor n de tipo std::size_t .
  1. Esto permite a los formateadores emitir mensajes de error significativos.

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Applied to Behavior as published Correct behavior
LWG 3892 C++20 el valor de pc. begin ( ) no estaba claro si format-spec no está presente aclarado