20 General utilities library [utilities]

20.20 Formatting [format]

20.20.5 Formatter [format.formatter]

20.20.5.3 Class template basic_Β­format_Β­parse_Β­context [format.parse.ctx]

namespace std {
  template<class charT>
  class basic_format_parse_context {
  public:
    using char_type = charT;
    using const_iterator = typename basic_string_view<charT>::const_iterator;
    using iterator = const_iterator;

  private:
    iterator begin_;                                    // exposition only
    iterator end_;                                      // exposition only
    enum indexing { unknown, manual, automatic };       // exposition only
    indexing indexing_;                                 // exposition only
    size_t next_arg_id_;                                // exposition only
    size_t num_args_;                                   // exposition only

  public:
    constexpr explicit basic_format_parse_context(basic_string_view<charT> fmt,
                                                  size_t num_args = 0) noexcept;
    basic_format_parse_context(const basic_format_parse_context&) = delete;
    basic_format_parse_context& operator=(const basic_format_parse_context&) = delete;

    constexpr const_iterator begin() const noexcept;
    constexpr const_iterator end() const noexcept;
    constexpr void advance_to(const_iterator it);

    constexpr size_t next_arg_id();
    constexpr void check_arg_id(size_t id);
  };
}
An instance of basic_Β­format_Β­parse_Β­context holds the format string parsing state consisting of the format string range being parsed and the argument counter for automatic indexing.
constexpr explicit basic_format_parse_context(basic_string_view<charT> fmt, size_t num_args = 0) noexcept;
Effects: Initializes begin_Β­ with fmt.begin(), end_Β­ with fmt.end(), indexing_Β­ with unknown, next_Β­arg_Β­id_Β­ with 0, and num_Β­args_Β­ with num_Β­args.
constexpr const_iterator begin() const noexcept;
Returns: begin_Β­.
constexpr const_iterator end() const noexcept;
Returns: end_Β­.
constexpr void advance_to(const_iterator it);
Preconditions: end() is reachable from it.
Effects: Equivalent to: begin_Β­ = it;
constexpr size_t next_arg_id();
Effects: If indexing_Β­ != manual, equivalent to:
if (indexing_ == unknown)
  indexing_ = automatic;
return next_arg_id_++;
Throws: format_Β­error if indexing_Β­ == manual which indicates mixing of automatic and manual argument indexing.
constexpr void check_arg_id(size_t id);
Effects: If indexing_Β­ != automatic, equivalent to:
if (indexing_ == unknown)
  indexing_ = manual;
Throws: format_Β­error if indexing_Β­ == automatic which indicates mixing of automatic and manual argument indexing.
Remarks: Call expressions where id >= num_Β­args_Β­ are not core constant expressions ([expr.const]).