std::basic_...ormat_string(3)
πΈ NAME πΈ
okay bestie, welcome to the std::basic_...ormat_string(3) page from the C++ Standard Libary manual β yes, that's "Libary" with one r in the header, we're keeping it, iykyk π
.
std::basic_format_string,std::format_string,std::wformat_stringβ that's the lineup. The description line is literallystd::basic_format_string,std::format_string,std::wformat_stringagain, because the page says it twice and we respect the repetition π.
β¨ Synopsis β¨
Defined in header <format>.
template< class CharT, class... Args > (1)
(since C++20)
struct basic_format_string;
template< class... Args >
using format_string = (2)
(since C++20)
basic_format_string<char, std::type_identity_t<Args>...>;
template< class... Args >
using wformat_string = (3)
(since C++20)
basic_format_string<wchar_t, std::type_identity_t<Args>...>;
Class template std::basic_format_string wraps a std::basic_string_view that will be used by formatting functions. That's the whole bit: it's a wrapper around a string view, and formatting functions get to use it π¦.
The constructor of std::basic_format_string performs compile-time format string checks unless the constructor argument is returned by std::runtime_format (since C++26). So compile-time checking is the default vibe; std::runtime_format is the escape hatch β¨.
π Member functions π
- (constructor) β constructs a
basic_format_string, raising compile error if the constructor argument is not a format string (public member function). getβ returns the wrapped string (public member function).
π«Ά std::basic_format_string::basic_format_string π«Ά
template< class T >
(1)
consteval basic_format_string( const T& s );
basic_format_string( /* runtime-format-string */<CharT> s )
(2) (since C++26)
noexcept;
- Constructs a
basic_format_stringobject that stores a view of strings. If the argument is not a compile-time constant, or if it cannot be parsed as a format string for the formatting argument typesArgs, the construction is ill-formed. This overload participates in overload resolution only ifconst T&modelsstd::convertible_to<std::basic_string_view<CharT>>. - Constructs a
basic_format_stringobject that stores a view of stringsas returned bystd::runtime_format. It does not perform format string checks upon construction.
π Parameters π
The parameter is 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.
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}.
Then the format spec gets interpreted depending on the type, like this:
- 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. (since C++23) - For
std::thread::idandstd::stacktrace_entry, see 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 specification. (since C++26) - For other formattable types, the format specification is determined by user-defined formatter specializations.
β std::basic_format_string::get β
constexpr std::basic_string_view<CharT> get() const noexcept;
Returns the stored string view. That's it. That's the function. Slay. π
π¦ Notes π¦
The alias templates format_string and wformat_string use std::type_identity_t to inhibit template argument deduction. Typically, when they appear as a function parameter, their template arguments are deduced from other function arguments.
template<class... Args>
std::string format(std::format_string<Args...> fmt, Args&&... args);
auto s = format("{} {}", 1.0, 2);
// Calls format<double, int>. Args are deduced from 1.0, 2
// Due to the use of type_identity_t in format_string, template argument deduction
// does not consider the type of the format string.
So yeah: Args come from 1.0, 2, not from the format string, because type_identity_t is doing its little anti-deduction dance π§.
π Example π
This section is incomplete Reason: no example
π₯ Defect reports π₯
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
- P2508R1 β Applied to: C++20 β Behavior as published: there's no user-visible name for this facility β Correct behavior: the name
basic_format_stringis exposed.
π Category π
- Todo no example
okay that's the whole page, bestie! Big love to http://cppreference.com, version 2024.06.10, and the std::basic_...ormat_string(3) page β mwah πβ¨
π¦ 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