Let
charT be either
char or
wchar_t. Each specialization of
formatter is either enabled or disabled,
as described below
. A
debug-enabled specialization of
formatter
additionally provides
a public, constexpr, non-static member function
set_debug_format()
which modifies the state of the
formatter to be as if
the type of the
std-format-spec
parsed by the last call to
parse were
?. Each header that declares the template
formatter
provides the following enabled specializations:
- The debug-enabled specializations
template<> struct formatter<char, char>;
template<> struct formatter<char, wchar_t>;
template<> struct formatter<wchar_t, wchar_t>;
- For each charT,
the debug-enabled string type specializations
template<> struct formatter<charT*, charT>;
template<> struct formatter<const charT*, charT>;
template<size_t N> struct formatter<charT[N], charT>;
template<class traits, class Allocator>
struct formatter<basic_string<charT, traits, Allocator>, charT>;
template<class traits>
struct formatter<basic_string_view<charT, traits>, charT>;
- For each charT,
for each cv-unqualified arithmetic type ArithmeticT
other than
char,
wchar_t,
char8_t,
char16_t, or
char32_t,
a specialization
template<> struct formatter<ArithmeticT, charT>;
- For each charT,
the pointer type specializations
template<> struct formatter<nullptr_t, charT>;
template<> struct formatter<void*, charT>;
template<> struct formatter<const void*, charT>;
The
parse member functions of these formatters
interpret the format specification
as a
std-format-spec
as described in
[format.string.std]. [
Note 1:
Specializations such as
formatter<wchar_t, char>
and
formatter<const char*, wchar_t>
that would require implicit
multibyte / wide string or character conversion are disabled
. —
end note]