Files
2025-10-25 03:02:53 +03:00

7.1 KiB

[format.parse.ctx]

28 Text processing library [text]

28.5 Formatting [format]

28.5.6 Formatter [format.formatter]

28.5.6.6 Class template basic_format_parse_context [format.parse.ctx]

🔗

namespace std {templateclass basic_format_parse_context {public:using char_type = charT; using const_iterator = typename basic_string_view::const_iterator; using iterator = const_iterator; private: iterator begin_; // exposition only iterator end_; // exposition onlyenum indexing { unknown, manual, automatic }; // exposition only indexing indexing_; // exposition only size_t next_arg_id_; // exposition only size_t num_args_; // exposition onlypublic:constexpr explicit basic_format_parse_context(basic_string_view fmt) 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); template<class... Ts>constexpr void check_dynamic_spec(size_t id) noexcept; constexpr void check_dynamic_spec_integral(size_t id) noexcept; constexpr void check_dynamic_spec_string(size_t id) noexcept; };}

1

#

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.

2

#

If a program declares an explicit or partial specialization ofbasic_format_parse_context, the program is ill-formed, no diagnostic required.

🔗

constexpr explicit basic_format_parse_context(basic_string_view<charT> fmt) noexcept;

3

#

Effects: Initializesbegin_ with fmt.begin(),end_ with fmt.end(),indexing_ with unknown,next_arg_id_ with 0, andnum_args_ with 0.

[Note 1:

Any call tonext_arg_id, check_arg_id, or check_dynamic_spec on an instance of basic_format_parse_context initialized using this constructor is not a core constant expression.

— end note]

🔗

constexpr const_iterator begin() const noexcept;

4

#

Returns: begin_.

🔗

constexpr const_iterator end() const noexcept;

5

#

Returns: end_.

🔗

constexpr void advance_to(const_iterator it);

6

#

Preconditions: end() is reachable from it.

7

#

Effects: Equivalent to: begin_ = it;

🔗

constexpr size_t next_arg_id();

8

#

Effects: If indexing_ != manual is true, equivalent to:if (indexing_ == unknown) indexing_ = automatic;return next_arg_id_++;

9

#

Throws: format_error if indexing_ == manual is true.

[Note 2:

This indicates mixing of automatic and manual argument indexing.

— end note]

10

#

Remarks: Let cur-arg-id be the value of next_arg_id_ prior to this call.

Call expressions where cur-arg-id >= num_args_ is true are not core constant expressions ([expr.const]).

🔗

constexpr void check_arg_id(size_t id);

11

#

Effects: If indexing_ != automatic is true, equivalent to:if (indexing_ == unknown) indexing_ = manual;

12

#

Throws: format_error ifindexing_ == automatic is true.

[Note 3:

This indicates mixing of automatic and manual argument indexing.

— end note]

13

#

Remarks: A call to this function is a core constant expression ([expr.const]) only ifid < num_args_ is true.

🔗

template<class... Ts> constexpr void check_dynamic_spec(size_t id) noexcept;

14

#

Mandates: sizeof...(Ts) ≥ 1.

The types in Ts... are unique.

Each type in Ts... is one ofbool,char_type,int,unsigned int,long long int,unsigned long long int,float,double,long double,const char_type*,basic_string_view<char_type>, orconst void*.

15

#

Remarks: A call to this function is a core constant expression only if

id < num_args_ is true and

the type of the corresponding format argument (after conversion to basic_format_arg) is one of the types in Ts....

🔗

constexpr void check_dynamic_spec_integral(size_t id) noexcept;

16

#

Effects: Equivalent to:check_dynamic_spec<int, unsigned int, long long int, unsigned long long int>(id);

🔗

constexpr void check_dynamic_spec_string(size_t id) noexcept;

17

#

Effects: Equivalent to:check_dynamic_spec<const char_type*, basic_string_view<char_type>>(id);