Determine the total number of characters in the formatted string by formatting args according to the format string fmt. If present, loc is used for locale-specific formatting.
The behavior is undefined if std::formatter<std::remove_cvref_t<Ti>, CharT> does not meet the BasicFormatter requirements for any Ti
in Args
.
Each replacement field has the following format:
{
arg-id (optional) }
(1) {
arg-id (optional) :
format-spec }
(2)
1) replacement field without a format specification
2) replacement field with a format specification
arg-id - specifies the index of the argument inargs
whose value is to be used for formatting; if it is omitted, the arguments are used in order.
The arg-id s in a format string must all be present or all be omitted. Mixing manual and automatic indexing is an error.
format-spec - the format specification defined by the std::formatter specialization for the corresponding argument. Cannot start with }.formatter
specializations.The total number of characters in the formatted string.
[edit] ExceptionsPropagates any exception thrown by formatter.
[edit] Example#include <format> #include <iomanip> #include <iostream> #include <string_view> #include <vector> int main() { using namespace std::literals::string_view_literals; constexpr auto fmt_str{"Hubble's H{0} {1} {2:*^4} miles/sec/mpc."sv}; constexpr auto sub_zero{"\N{SUBSCRIPT ZERO}"sv}; // "â" or {0342, 130, 128} constexpr auto aprox_equ{"\N{APPROXIMATELY EQUAL TO}"sv}; // "â " or {0342, 137, 133} constexpr int Ho{42}; // Hâ const auto min_buffer_size{std::formatted_size(fmt_str, sub_zero, aprox_equ, Ho)}; std::cout << "Min buffer size = " << min_buffer_size << '\n'; // Use std::vector as dynamic buffer. The buffer does not include the trailing '\0'. std::vector<char> buffer(min_buffer_size); std::format_to_n(buffer.data(), buffer.size(), fmt_str, sub_zero, aprox_equ, Ho); std::cout << "Buffer: " << std::quoted(std::string_view{buffer.data(), min_buffer_size}) << '\n'; // Print the buffer directly after adding the trailing '\0'. buffer.push_back('\0'); std::cout << "Buffer: " << std::quoted(buffer.data()) << '\n'; }
Output:
Min buffer size = 37 Buffer: "Hubble's Hâ â *42* miles/sec/mpc." Buffer: "Hubble's Hâ â *42* miles/sec/mpc."[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR Applied to Behavior as published Correct behavior P2216R3 C++20 throws std::format_error for invalid format string invalid format string results in compile-time error P2418R2 C++20 objects that are neither const-usable nor copyablebasic_format_string
is exposed [edit] See also writes out formatted representation of its arguments through an output iterator
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4