std::enable_nonlocking_formatter_optimization
|   Defined in header  <format>
  | 
||
|   template< class T > constexpr bool enable_nonlocking_formatter_optimization = false;  | 
(since C++23) | |
This template can be used by implementations to enable efficient implementations of std::print and std::println.
If std::enable_nonlocking_formatter_optimization<T> is true, printing an argument of type T can be performed in a more efficient way (see std::print for details). std::enable_nonlocking_formatter_optimization specializations can be true in the following cases:
-  
Tis one of the types where std::formatter<T, CharT> is a basic standard specialization or standard specialization for a library type (see below). -  A program may specialize this template for any cv-unqualified program-defined type 
T. Such specializations must be usable in constant expressions and have type const bool. 
Basic standard specializations
In the following list, CharT is either char or wchar_t, ArithmeticT is any cv-unqualified arithmetic type other than char, wchar_t, char8_t, char16_t, or char32_t:
|   Nonlocking flag for character formatters  | 
||
|   template<> constexpr bool enable_nonlocking_formatter_optimization<CharT> = true;  | 
(1) | |
|   Nonlocking flag for string formatters  | 
||
|   template<> constexpr bool enable_nonlocking_formatter_optimization<CharT*> = true;  | 
(2) | |
|   template<> constexpr bool enable_nonlocking_formatter_optimization<const CharT*> = true;  | 
(3) | |
|   template< std::size_t N > constexpr bool enable_nonlocking_formatter_optimization<CharT[N]> = true;  | 
(4) | |
|   template< class Traits, class Alloc > constexpr bool enable_nonlocking_formatter_optimization  | 
(5) | |
|   template< class Traits > constexpr bool enable_nonlocking_formatter_optimization  | 
(6) | |
|   Nonlocking flag for arithmetic formatters  | 
||
|   template<> constexpr bool enable_nonlocking_formatter_optimization<ArithmeticT> = true;  | 
(7) | |
|   Nonlocking flag for pointer formatters  | 
||
|   template<> constexpr bool enable_nonlocking_formatter_optimization<std::nullptr_t> = true;  | 
(8) | |
|   template<> constexpr bool enable_nonlocking_formatter_optimization<void*> = true;  | 
(9) | |
|   template<> constexpr bool enable_nonlocking_formatter_optimization<const void*> = true;  | 
(10) | |
Standard specializations for library types
Specializations of enable_nonlocking_formatter_optimization for all specializations of the following standard templates are defined as true:
-  std::chrono::zoned_time when its template parameter type 
TimeZonePtris const std::chrono::time_zone* 
Specializations of enable_nonlocking_formatter_optimization for all specializations of the following standard templates are defined as conditionally true:
Specialization of enable_nonlocking_formatter_optimization for all formattable range types are always defined as false for which the range format kind is not std::range_format::disabled.
Notes
| Feature-test macro | Value | Std | Feature | 
|---|---|---|---|
__cpp_lib_print | 
202403L | (C++26) (DR23)  | 
Formatted output with stream locking | 
| 202406L | (C++26) (DR23)  | 
Enabling nonlocking formatter optimization for more formattable types | 
See also
|    (C++20)  | 
  defines formatting rules for a given type  (class template)  | 
|    (C++23)  | 
  prints to stdout or a file stream using formatted representation of the arguments  (function template)  | 
|    (C++23)  | 
  same as std::print except that each print is terminated by additional new line  (function template)  |