This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.

3619. Specification of vformat_to contains ill-formed formatted_size calls

Section: 20.20.5 [format.functions] Status: New Submitter: Tim Song Opened: 2021-10-17 Last modified: 2021-10-17

Priority: Not Prioritized

View all other issues in [format.functions].

View all issues with New 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:

Proposed resolution:

This wording is relative to N4892.

  1. Modify 20.20.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 is formatted_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- […]