This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of WP status.
Section: 22.14.6.1 [formatter.requirements] Status: WP Submitter: Alberto Barbati Opened: 2020-06-30 Last modified: 2021-06-07
Priority: 3
View all other issues in [formatter.requirements].
View all issues with WP 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 to fc.out() and returns an iterator past the end of the output range. The output shall only depend on t, fc.locale(), and the range [pc.begin(), pc.end()) from the last call to f.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 22.14.6.6 [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 22.14.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 to fc.out() and returns an iterator past the end of the output range. The output shall only depend on t, fc.locale(), andthe range [pc.begin(), pc.end()) from the last call to f.parse(pc), and fc.arg(n), where n is a size_t index value that has been validated with a call to pc.check_arg_id(n) in the last call to f.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 22.14.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 to fc.out() and returns an iterator past the end of the output range. The output shall only depend on t, fc.locale(), fc.arg(n) for any value n of type size_t, and the range [pc.begin(), pc.end()) from the last call to f.parse(pc). …