std::format_to_n, std::format_to_n_result
Defined in header <format>
|
||
template< class OutputIt, class... Args > std::format_to_n_result<OutputIt> |
(1) | (since C++20) |
template< class OutputIt, class... Args > std::format_to_n_result<OutputIt> |
(2) | (since C++20) |
template< class OutputIt, class... Args > std::format_to_n_result<OutputIt> |
(3) | (since C++20) |
template< class OutputIt, class... Args > std::format_to_n_result<OutputIt> |
(4) | (since C++20) |
Helper types |
||
template< class OutputIt > struct format_to_n_result { |
(5) | (since C++20) |
Format args according to the format string fmt, and write the result to the output iterator out. At most n characters are written. If present, loc is used for locale-specific formatting.
Let CharT
be char for overloads (1,3), wchar_t for overloads (2,4).
These overloads participate in overload resolution only if
OutputIt
satisfies the concept std::output_iterator<const CharT&>.
The behavior is undefined if OutputIt
does not model (meet the semantic requirements of) the concept std::output_iterator<const CharT&>, or if std::formatter<std::remove_cvref_t<Ti>, CharT> does not meet the BasicFormatter requirements for any Ti
in Args
.
std::format_to_n_result
has no base classes, or members other than out, size
and implicitly declared special member functions.Contents |
[edit] Parameters
out | - | iterator to the output buffer | ||||||||||||||||||||||||||||||||||||||||||||||
n | - | maximum number of characters to be written to the buffer | ||||||||||||||||||||||||||||||||||||||||||||||
fmt | - |
Each replacement field has the following format:
1) replacement field without a format specification
2) replacement field with a format specification
| ||||||||||||||||||||||||||||||||||||||||||||||
args... | - | arguments to be formatted | ||||||||||||||||||||||||||||||||||||||||||||||
loc | - | std::locale used for locale-specific formatting |
[edit] Return value
A format_to_n_result
such that the out member is an iterator past the end of the output range, and the size
member is the total (not truncated) output size.
[edit] Exceptions
Propagates any exception thrown by formatter or iterator operations.
[edit] Notes
The libstdc++ implementation prior to GCC-13.3 had a bug in reporting the correct format_to_n_result::out value.
[edit] Example
At Godbolt's Compiler Explorer: clang (trunk) + libc++, GCC (trunk) + libstdc++.
#include <format> #include <initializer_list> #include <iomanip> #include <iostream> #include <string_view> int main() { char buffer[64]; for (std::size_t max_chars_to_write : {std::size(buffer) - 1, 23uz, 21uz}) { const std::format_to_n_result result = std::format_to_n( buffer, max_chars_to_write, "Hubble's H{2} {3} {0}{4}{1} km/sec/Mpc.", // 24 bytes w/o formatters 71, // {0}, occupies 2 bytes 8, // {1}, occupies 1 byte "\u2080", // {2}, occupies 3 bytes, '₀' (SUBSCRIPT ZERO) "\u2245", // {3}, occupies 3 bytes, '≅' (APPROXIMATELY EQUAL TO) "\u00B1" // {4}, occupies 2 bytes, '±' (PLUS-MINUS SIGN) ); // 24 + 2 + 1 + 3 + 3 + 2 == 35, no trailing '\0' *result.out = '\0'; // adds terminator to buffer const std::string_view str(buffer, result.out);