Namespaces
Variants

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

From cppreference.net
C++ named requirements

BasicFormatter est un type qui abstrait les opérations de formatage pour un type d'argument de formatage et un type de caractère donnés. Les spécialisations de std::formatter doivent satisfaire aux exigences de BasicFormatter .

Un BasicFormatter est un Formatter s'il est capable de formater à la fois des arguments constants et non constants.

Exigences

Un type satisfait BasicFormatter s'il est semi-régulier, ce qui signifie qu'il satisfait :

Et, étant donné les types et valeurs suivants, les expressions présentées dans le tableau ci-dessous sont valides et possèdent la sémantique indiquée :

Type Définition
CharT un type de caractère
Arg un type d'argument de formatage
Formatter un type Formatter pour les types Arg et CharT
OutputIt un type LegacyOutputIterator
ParseCtx std:: basic_format_parse_context < CharT >
FmtCtx std:: basic_format_context < OutputIt, CharT >
Valeur Définition
f une valeur de type (éventuellement qualifié const) Formatter
g une valeur de type Formatter
arg une lvalue de type Arg
t une valeur de type convertible en (éventuellement qualifié const) Arg
parse_ctx une lvalue de type ParseCtx satisfaisant toutes les conditions suivantes :
  • parse_ctx. begin ( ) pointe vers le début de la spécification de format du champ de remplacement en cours de formatage dans la chaîne de format .
  • Si la spécification de format n'est pas présente ou est vide, alors soit parse_ctx. begin ( ) == parse_ctx. end ( ) soit * parse_ctx. begin ( ) == '}' .
fmt_ctx une lvalue de type FmtCtx
Expression Type de retour Sémantique
g. parse ( parse_ctx ) ParseCtx::iterator
  • Dans l'intervalle [ parse_ctx. begin ( ) , parse_ctx. end ( ) ) , analyse la spécification de format pour le type Arg jusqu'au premier caractère non correspondant.
  • Lance std::format_error sauf si l'intervalle entier est analysé ou si le caractère non correspondant est } . [note 1]
  • Stocke les spécificateurs de format analysés dans g et retourne un itérateur de fin de l'intervalle analysé.
f. format ( arg, fmt_ctx ) FmtCtx::iterator
  • Formate arg selon les spécificateurs stockés dans f , écrit le résultat dans fmt_ctx. out ( ) et retourne un itérateur de fin de l'intervalle de sortie.
  • La sortie ne doit dépendre que de
    • arg ,
    • fmt_ctx. locale ( ) ,
    • l'intervalle [ parse_ctx. begin ( ) , parse_ctx. end ( ) ) du dernier appel à f. parse ( parse_ctx ) , et
    • fmt_ctx. arg ( n ) pour toute valeur n de type std::size_t .
  1. Cela permet aux formateurs d'émettre des messages d'erreur significatifs.

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement tel que publié Comportement correct
LWG 3892 C++20 la valeur de pc. begin ( ) n'était pas claire si format-spec n'est pas présent clarifié