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]