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.5 [format.functions] Status: WP Submitter: Tim Song Opened: 2021-10-17 Last modified: 2022-02-10
Priority: Not Prioritized
View all other issues in [format.functions].
View all issues with WP status.
Discussion:
The specification of vformat_to says that it formats "into the range [out, out + N), where N is formatted_size(fmt, args...) for the functions without a loc parameter and formatted_size(loc, fmt, args...) for the functions with a loc parameter".
This is wrong in at least two ways:First, args is a (w)format_args, not a pack, so it doesn't make sense to use ... to expand it.
Second, fmt is a (w)string_view parameter, and it is never a constant expression, and so the call is ill-formed after P2216 added compile-time format string checking.
[2022-01-29; Reflector poll]
Set status to Tentatively Ready after six votes in favour during reflector poll.
[2022-02-10 Approved at February 2022 virtual plenary. Status changed: Tentatively Ready → WP.]
Proposed resolution:
This wording is relative to N4892.
Modify 22.14.5 [format.functions] as indicated:
template<class Out> Out vformat_to(Out out, string_view fmt, format_args args); template<class Out> Out vformat_to(Out out, wstring_view fmt, wformat_args args); template<class Out> Out vformat_to(Out out, const locale& loc, string_view fmt, format_args args); template<class Out> Out vformat_to(Out out, const locale& loc, wstring_view fmt, wformat_args args);-12- Let charT be decltype(fmt)::value_type.
-13- Constraints: Out satisfies output_iterator<const charT&>. -14- Preconditions: Out models output_iterator<const charT&>. -15- Effects: Places the character representation of formatting the arguments provided by args, formatted according to the specifications given in fmt, into the range [out, out + N), where N isformatted_size(fmt, args...) for the functions without a loc parameter and formatted_size(loc, fmt, args...) for the functions with a loc parameterthe number of characters in that character representation. If present, loc is used for locale-specific formatting. -16- Returns: out + N. -17- […]