< cpp‎ | utility‎ | format
Utilities library
Language support
Type support (basic types, RTTI)
Library feature-test macros (C++20)
Dynamic memory management
Program utilities
Coroutine support (C++20)
Variadic functions
Debugging support
Three-way comparison
General utilities
Date and time
Function objects
Formatting library (C++20)
Relational operators (deprecated in C++20)
Integer comparison functions
Swap and type operations
Common vocabulary types
Elementary string conversions

Defined in header <format>
template< class Context >
class basic_format_arg;
(since C++20)

Provides access to a formatting argument.

basic_format_arg objects are typically created by std::make_format_args and accessed through std::visit_format_arg or the visit member functions(since C++26).

A basic_format_arg object behaves as if it stores a std::variant of the following types:

  • std::monostate (only if the object was default-constructed)
  • bool
  • Context::char_type
  • int
  • unsigned int
  • long long int
  • unsigned long long int
  • float
  • double
  • long double
  • const Context::char_type*
  • std::basic_string_view<Context::char_type>
  • const void*
  • basic_format_arg::handle


[edit] Member classes

type-erased wrapper that allows formatting an object of user-defined type
(public member class)

[edit] Member functions

constructs a std::basic_format_arg
(public member function)
operator bool
checks if the current object holds a formatting argument
(public member function)
visit the stored formatting argument
(public member function)

[edit] Non-member functions

(C++20) (deprecated in C++26)
argument visitation interface for user-defined formatters
(function template) [edit]


basic_format_arg() noexcept;
(since C++20)

Default constructor. Constructs a basic_format_arg that does not hold a formatting argument. The stored object has type std::monostate.

To create a basic_format_arg that holds a formatting argument, std::make_format_args has to be used.

std::basic_format_arg::operator bool

explicit operator bool() const noexcept;
(since C++20)

Checks whether *this holds a formatting argument.

Returns true if *this holds a formatting argument (i.e. the stored object does not have type std::monostate), false otherwise.


template< class Visitor >
decltype(auto) visit( this basic_format_arg arg, Visitor&& vis );
(1) (since C++26)
template< class R, class Visitor >
R visit( this basic_format_arg arg, Visitor&& vis );
(2) (since C++26)

Applies the visitor vis to the object contained in arg.

The visit functions do not modify the basic_format_arg object on which it is called because a copy of the object is used when calling vis.

1) Equivalent to return std::visit(std::forward<Visitor>(vis), v);, where v is the std::variant stored in arg.
2) Equivalent to return std::visit<R>(std::forward<Visitor>(vis), v);, where v is the std::variant stored in arg.

[edit] Notes

Feature-test macro Value Std Feature
__cpp_lib_format 202306L (C++26) Member visit

[edit] Example

[edit] See also

class that provides access to all formatting arguments
(class template) [edit]