std::formatted_size(3)
π NAME π
okay bestie, welcome to std::formatted_size(3) from the C++ Standard Libary β¨. The NAME section is literally std::formatted_size - std::formatted_size π
β¨ Synopsis β¨
Defined in header <format> π
It has four overloads, all since C++20:
(1)(since C++20)
template< class... Args >
std::size_t formatted_size( std::format_string<Args...> fmt,
Args&&... args );
(2)(since C++20)
template< class... Args >
std::size_t formatted_size( std::wformat_string<Args...> fmt,
Args&&... args );
(3)(since C++20)
template< class... Args >
std::size_t formatted_size( const std::locale& loc,
std::format_string<Args...> fmt,
Args&&... args );
(4)(since C++20)
template< class... Args >
std::size_t formatted_size( const std::locale& loc,
std::wformat_string<Args...> fmt,
Args&&... args );
so what does it do? It determines 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. It's giving "count the chars before you commit" energy π₯
π¨ bestie, the behavior is undefined ifstd::formatter<std::remove_cvref_t<Ti>, CharT>does not meet the BasicFormatter requirements for anyTiinArgs. That is not a cute look. Do not do it.
πΈ Parameters πΈ
fmtβ an object that represents the format string. The format string consists of:- ordinary characters (except
{and}), which are copied unchanged to the output, - escape sequences
{{and}}, which are replaced with{and}respectively in the output, and - replacement fields.
- ordinary characters (except
Each replacement field has the following format:
{ arg-id (optional) } (1)
{ arg-id (optional) : format-spec } (2)
- replacement field without a format specification
- replacement field with a format specification
arg-idβ specifies the index of the argument inargswhose value is to be used for formatting; if it is omitted, the arguments are used in order. Thearg-ids 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 thestd::formatterspecialization for the corresponding argument. Cannot start with}.- For basic types and standard string types, the format specification is interpreted as standard format specification.
- For chrono types, the format specification is interpreted as chrono format specification.
- For range types, the format specification is interpreted as range format specification.
- For
std::pairandstd::tuple, the format specification is interpreted as tuple format specification. - For
std::thread::idandstd::stacktrace_entry, see (since C++23) thread id format specification and stacktrace entry format specification. - For
std::basic_stacktrace, no format specifier is allowed. - For
std::filesystem::path, see path format (since C++26) specification. - For other formattable types, the format specification is determined by user-defined formatter specializations.
args...β arguments to be formattedlocβstd::localeused for locale-specific formatting
π Return value π
The total number of characters in the formatted string. That's the number. That's the whole return value. slay π
π Exceptions π
Propagates any exception thrown by formatter.
π Example π
// Run this code
#include <format>
#include <iostream>
#include <vector>
#include <string_view>
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 { "β"sv }; // { "\u2080"sv } => { 0xe2, 0x82, 0x80 };
constexpr auto aprox_equ { "β
"sv }; // { "\u2245"sv } => { 0xe2, 0x89, 0x85 };
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. Note: 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::string_view{buffer.data(), min_buffer_size} << "\"\n";
// Or we can print the buffer directly by adding the trailing '\0'.
buffer.push_back('\0');
std::cout << "Buffer: \"" << buffer.data() << "\"\n";
}
π Output π
Min buffer size = 37
Buffer: "Hubble's Hβ β
*42* miles/sec/mpc."
Buffer: "Hubble's Hβ β
*42* miles/sec/mpc."
π οΈ Defect reports π οΈ
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
- DR:
P2216R3; Applied to: C++20; Behavior as published: throwsstd::format_errorfor invalid format string; Correct behavior: invalid format string results in compile-time error. - DR:
P2418R2; Applied to: C++20; Behavior as published: objects that are neither const-usable nor copyable (such as generator-like objects) are not formattable; Correct behavior: allow formatting these objects. - DR:
P2508R1; Applied to: C++20; Behavior as published: there's no user-visible name for this facility; Correct behavior: the namebasic_format_stringis exposed.
π See also π
format_to(C++20) β writes out formatted representation of its arguments through an output iterator (function template).format_to_n(C++20) β writes out formatted representation of its arguments through an output iterator, not exceeding specified size (function template).
that's the whole vibe, bestie π this page came from http://cppreference.com, dated 2024.06.10, for std::formatted_size(3). periodt β¨
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms