The Wayback Machine - https://web.archive.org/web/20230907200325/https://en.cppreference.com/w/cpp/utility/format
Namespaces
Variants
Views
Actions

Formatting library (since C++20)

From cppreference.com
< cpp‎ | utility
 
 
Utilities library
General utilities
Date and time
Function objects
Formatting library (C++20)
(C++11)
Relational operators (deprecated in C++20)
Integer comparison functions
(C++20)(C++20)(C++20)   
(C++20)
Swap and type operations
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Common vocabulary types
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Elementary string conversions
(C++17)
(C++17)
 
Formatting library
Formatting functions
(C++20)
(C++20)
(C++20)
(C++20)
Formatting concepts
Formatter
(C++20)
Formatting arguments
(C++20) (deprecated in C++26)
Format error
 

The text formatting library offers a safe and extensible alternative to the printf family of functions. It is intended to complement the existing C++ I/O streams library.

Contents

[edit] Formatting functions

Defined in header <format>
(C++20)
stores formatted representation of the arguments in a new string
(function template) [edit]
(C++20)
writes out formatted representation of its arguments through an output iterator
(function template) [edit]
writes out formatted representation of its arguments through an output iterator, not exceeding specified size
(function template) [edit]
determines the number of characters necessary to store the formatted representation of its arguments
(function template) [edit]

[edit] Formatting concepts

Defined in header <format>
specifies that a type is formattable, that is, it specializes std::formatter and provides member functions parse and format
(concept) [edit]

[edit] Extensibility support and implementation detail

Defined in header <format>
(C++20)
non-template variant of std::format using type-erased argument representation
(function) [edit]
non-template variant of std::format_to using type-erased argument representation
(function template) [edit]
creates a type-erased object referencing all formatting arguments, convertible to format_args
(function template) [edit]
(C++20) (deprecated in C++26)
argument visitation interface for user-defined formatters
(function template) [edit]
(C++20)
class template that defines formatting rules for a given type
(class template) [edit]
class template that helps implementing std::formatter specializations for range types
(class template) [edit]
specifies how a range should be formatted
(enum) [edit]
selects a suited std::range_format for a range
(variable template) [edit]
class template that provides access to a formatting argument for user-defined formatters
(class template) [edit]
class that provides access to all formatting arguments
(class template) [edit]
class template that performs compile-time format string checks at construction time
(class template) [edit]
formatting state, including all formatting arguments and the output iterator
(class template) [edit]
formatting string parser state
(class template) [edit]
exception type thrown on formatting errors
(class) [edit]

[edit] Notes

Feature-test macro Value Std Comment
__cpp_lib_format 201907L (C++20) Text formatting
202106L (C++20)
(DR)
Compile-time format string checks;
Reducing parameterization of std::vformat_to
202110L (C++20)
(DR)
Fixing locale handling in chrono formatters;
Supporting non-const-formattable types
202207L (C++23) Exposing std::basic_format_string;
Clarify handling of encodings in localized formatting of chrono types
__cpp_lib_format_ranges 202207L (C++23) Formatting ranges

We intentionally treat the addition of std::basic_format_string (P2508) as a defect report because all known implementations make these components available in C++20 mode, although it is not so categorized officially.

[edit] Example

#include <cassert>
#include <format>
 
int main()
{
    std::string message = std::format("The answer is {}.", 42);
    assert(message == "The answer is 42.");
}

[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
P2418R2 C++20 objects that are neither const-formattable nor copyable
(such as generator-like objects) are not formattable
allow formatting these objects
(relaxed formatter requirements)
P2508R1 C++20 there's no user-visible name for this facility the name basic_format_string is exposed

[edit] See also

(C++23)
prints to stdout or a file stream using formatted representation of the arguments
(function template) [edit]
(C++23)
same as std::print except that each print is terminated by additional new line
(function template) [edit]
outputs formatted representation of the arguments
(function template) [edit]