fc.arg()
Section: 28.5.6.1 [formatter.requirements] Status: C++23 Submitter: Alberto Barbati Opened: 2020-06-30 Last modified: 2023-11-22
Priority: 3
View all other issues in [formatter.requirements].
View all issues with C++23 status.
Discussion:
The requirements on the expression f.format(t, fc)
in [tab:formatter] say
Formats
t
according to the specifiers stored in*this
, writes the output tofc.out()
and returns an iterator past the end of the output range. The output shall only depend ont
,fc.locale()
, and the range[pc.begin(), pc.end())
from the last call tof.parse(pc)
.
Strictly speaking, this wording effectively forbids f.format(t, fc)
from calling fc.arg(n)
,
whose motivation is precisely to allow a formatter to rely on arguments different from t
. According to this
interpretation, there's no conforming way to implement the "{ arg-id }"
form of the width and
precision fields of standard format specifiers. Moreover, the formatter described in the example if paragraph
28.5.6.7 [format.context]/8 would also be non-conforming.
[2020-07-12; Reflector prioritization]
Set priority to 3 after reflector discussions.
Previous resolution [SUPERSEDED]:
This wording is relative to N4861.
Modify 28.5.6.1 [formatter.requirements], Table [tab:formatter], as indicated:
Table 67: Formatter requirements [tab:formatter] Expression Return type Requirement …
f.format(t, fc)
FC::iterator
Formats t
according to the specifiers stored in*this
, writes the output tofc.out()
and returns an iterator past the end of the output range. The output shall only depend ont
,fc.locale()
,andthe range[pc.begin(), pc.end())
from the last call tof.parse(pc)
, andfc.arg(n)
, wheren
is asize_t
index value that has been validated with a call topc.check_arg_id(n)
in the last call tof.parse(pc)
.…
[2021-05-20 Tim comments and updates wording]
During reflector discussion Victor said that the formatter requirements should allow dependency on any of the format arguments in the context. The wording below reflects that.
[2021-05-24; Reflector poll]
Set status to Tentatively Ready after six votes in favour during reflector poll.
[2021-06-07 Approved at June 2021 virtual plenary. Status changed: Voting → WP.]
Proposed resolution:
This wording is relative to N4885.
Modify 28.5.6.1 [formatter.requirements], Table [tab:formatter], as indicated:
Table 67: Formatter requirements [tab:formatter] Expression Return type Requirement …
f.format(t, fc)
FC::iterator
Formats t
according to the specifiers stored in*this
, writes the output tofc.out()
and returns an iterator past the end of the output range. The output shall only depend ont
,fc.locale()
,fc.arg(n)
for any valuen
of typesize_t
, and the range[pc.begin(), pc.end())
from the last call tof.parse(pc)
.…